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