I am trying to use one Hibernate mapping for several different databases: H2, Oracle, MySql.
Each database has a different list of reserved words.
I would like Hibernate to automatically escape the reserved words.
I know I can:
Is there a more elegant solution?
To escape reserved keywords in SQL SELECT statements and in queries on views, enclose them in double quotes ('').
Keywords are words that have significance in SQL. Certain keywords, such as SELECT , DELETE , or BIGINT , are reserved and require special treatment for use as identifiers such as table and column names. This may also be true for the names of built-in functions.
AFAIK, Hibernate doesn't maintain a list of reserved keyword (per database) so I think you should look at database identifier escaping.
If you are using Hibernate 3.5+, try hibernate.globally_quoted_identifiers=true
to quote all database identifiers (this is something they added for JPA 2.0, see the secion 2.13 Naming of Database Objects of the spec for the JPA way to activate this if you are using JPA).
Prior to version 3.5, Hibernate doesn't offer any configuration option for global escaping. Implementing a custom NamingStrategy
to escape everything transparently would be the recommended way.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With