I am having a strange problem. But first the orm.xml:
<entity class="de.test.businessobjects.Repeat">
<table name="repeat"/>
<attributes>
<id name="id">
<generated-value strategy="TABLE"/>
</id>
<many-to-one name="repeatType" fetch="LAZY">
<join-column name="id_repeatType"/>
</many-to-one>
<many-to-one name="trainingSet" fetch="LAZY">
<join-column name="id_trainingSet"/>
</many-to-one>
</attributes>
</entity>
I use Hibernate / JPA. Everything runs fine with HSQL and Derby, so my BO, DAO and unit tests must be ok. When testing with MySQL, I get this error:
org.springframework.dao.InvalidDataAccessResourceUsageException:
could not execute query; SQL [select
repeat0_.id as id8_,
repeat0_.id_repeatType as id2_8_,
repeat0_.id_trainingSet as id3_8_ from
repeat repeat0_];
However, changing
<table name="repeat"/>
to
<table name="repeatt"/>
solves the problem with MySQL.
What is wrong? Is “repeat” a reserved keyword or is this a bug in Hibernate’s JPA implementation?
Thank & Cheers
Er
The SQL Reserved Words Checker tells me that “repeat” is a reserved SQL keyword with MySQL (and DB2) so you need to escape it.
JPA 1.0 doesn’t define a standard way to handle that so you’ll have to use Hibernate solution which relies on backticks. From the Hibernate Reference Guide:
I assume this would work in
orm.xmltoo.JPA 2.0 went further and defined a way to specify delimited identifiers:
If you are using JPA 2.0, I’d recommend to use the portable solution.