PostgreSQL problems with escaping table names
faelin Mar 9, 2006 11:55 AMHi. I'm trying to use EJB3.0 (latest) with PostgreSQL. I'm having some troubles, when I want to use postgresql reserved words for my table names, like this:
when i do a: select o.orderId from Order as o hibernate generates: select order0_.order_id as x0_0_ from order order0_ the correct sql would be: select order0_.order_id as x0_0_ from "order" order0_
In other words, it does't escape table names as they should be. I found somewhere that I should add backticks (`) around my table name, but that was when I configure Hibernate with xml files. Since I'm using annotations, I'm doing this:
@Table(name = "`Order`")
Which works fine for entities that does not have relations. When I introduce them, it gets this error:
Caused by: org.hibernate.MappingException: Unable to find physical table: Order
Can anyone help me? Here is a more complete code sample:
Blah.java
@Entity
@Table(name = "`Blah`")
public class Blah {
public int id;
public String foo;
public String getFoo() {
return foo;
}
public void setFoo(String foo) {
this.foo = foo;
}
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
Foo.java
@Entity
@Table(name = "`Foo`")
public class Foo {
public int id;
public Blah blah;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@ManyToOne
public Blah getBlah() {
return blah;
}
public void setBlah(Blah blah) {
this.blah = blah;
}
}
The error:
java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.ejb3.ServiceDelegateWrapper.startService(ServiceDelegateWra ............. ............. at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread. loop(AbstractDeploymentScanner.java:218) at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread. run(AbstractDeploymentScanner.java:197) Caused by: org.hibernate.MappingException: Unable to find physical table: Blah at org.hibernate.cfg.Mappings.getLogicalTableName(Mappings.java:473) at org.hibernate.cfg.Mappings.getLogicalTableName(Mappings.java:520) at org.hibernate.cfg.Ejb3JoinColumn.linkValueUsingDefaultColumnNaming(Ej b3JoinColumn.java:270) at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:194 ) at org.hibernate.cfg.FkSecondPass.doSecondPass(FkSecondPass.java:44) at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(Annotatio nConfiguration.java:233) at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:997) at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.j ava:722) at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerCo nfigurator.java:161) at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Co nfiguration.java:567) at org.hibernate.ejb.Ejb3Configuration.createContainerEntityManagerFacto ry(Ejb3Configuration.java:245) at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFa ctory(HibernatePersistence.java:108) at org.jboss.ejb3.entity.PersistenceUnitDeployment.start(PersistenceUnit Deployment.java:260) ... 77 more