[hibernate-issues] [Hibernate-JIRA] Created: (HHH-4553) Hibernate doesn't support official JPA2 escape char for table name

Julien HENRY (JIRA) noreply at atlassian.com
Mon Nov 9 06:14:13 EST 2009


Hibernate doesn't support official JPA2 escape char for table name
------------------------------------------------------------------

                 Key: HHH-4553
                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-4553
             Project: Hibernate Core
          Issue Type: Bug
    Affects Versions: 3.5.0-Beta-2
         Environment: Oracle 9i
Derby
            Reporter: Julien HENRY


One of the table of my schema is named FUNCTION. As it is a reserved name with Derby (used for my JUnit tests), I have escaped the table name to make it works with Derby (as specified by JPA2 spec $2.13):

@Entity
@Table(name="\"FUNCTION\"")
public class Function {
//...
}

My JUnit tests are working fine, then I tried to connect to my Oracle DB, and I have enabled schema validation:
<property name="hibernate.hbm2ddl.auto" value="validate"/>

But I got an exception as Hibernate is looking for a table with name "FUNCTION" in Oracle metadata.

Caused by: org.hibernate.HibernateException: Missing table: "FUNCTION"
	at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1153) [hibernate-core-3.5.0-Beta-2.jar:3.5.0-Beta-2]
	at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:139) [hibernate-core-3.5.0-Beta-2.jar:3.5.0-Beta-2]
	at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:364) [hibernate-core-3.5.0-Beta-2.jar:3.5.0-Beta-2]
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1367) [hibernate-core-3.5.0-Beta-2.jar:3.5.0-Beta-2]
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:858) [hibernate-annotations-3.5.0-Beta-2.jar:3.5.0-Beta-2]
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:733) [hibernate-entitymanager-3.5.0-Beta-2.jar:3.5.0-Beta-2]

This is not specific to Oracle, because when I change:
<property name="hibernate.hbm2ddl.auto" value="create"/>
by
<property name="hibernate.hbm2ddl.auto" value="validate"/>

in my JUnit tests, I have the same issue with the embedded Derby DB.


Using Hibernate specific ` as quote works fine:
@Entity
@Table(name="`FUNCTION`")
public class Function {
//...
}

The issue can be easily fixed in Table.setName(String name). Replace:
if ( name.charAt( 0 ) == '`' ) {
by
if ( name.charAt( 0 ) == '"' ) {
or if you want to keep backward compatibility:
if ( name.charAt( 0 ) == '`' || name.charAt( 0 ) == '"' ) {


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list