我有一个需求,我需要同时支持Oracle和PostgreSQL。我有以下休眠映射 -Hibernate:针对Oracle和PostgreSQL的映射
<id name="id" type="java.lang.Integer">
<column name="id" not-null="true" />
<generator class="native">
<param name="sequence">`OneTimeAccessToken_id_seq`</param>
</generator>
</id>
<property name="resource" type="java.lang.String">
<column name="`res`" not-null="true" />
</property>
<property name="expires" type="long">
<column name="`expires`" not-null="true" />
</property>
但是,这不适用于Oracle,因为它有反引号。如果我删除反引号,PostgreSQL会失败。关于如何为这两个数据库提供支持的任何输入。
我正在使用org.hibernate.dialect.Oracle10gDialect
针对Oracle 11.2版本,那对不对?
我的问题是反引号,并没有使数据库的序列兼容。我已经实现了。我在hbm文件中使用了反引号来使PostgreSQL根据我指定的字符情况创建表/列。如果我删除反引号,PostgreSQL将所有内容翻译为小写。现在使用反引号,PostgreSQL一切正常,但是,它会引起Oracle说的问题它无法找到表或视图:“OneTimeAccessToken”。我正在尝试确定如何解决维护表/列名称案例的这一问题,并使其对Oracle起作用。
我知道生成器类。我的问题不在于生成器,我的问题是使得hbm文件不兼容以便与Oracle一起使用。如果我删除它,它会打破PostgreSQL。我知道方言应该处理它,但是,在我的情况下它不是。我不知道为什么,需要更多的指针进行调查。 – devang 2012-07-31 15:44:47
写你自己的idgenerator,它继承sequencegenerator并根据方言改变序列名称 – Firo 2012-08-01 06:19:57
顺便说一句,这听起来像一个Hibernate的bug。在这两种情况下,Hibernate都应该正确引用,你不应该插入你自己的引用。请提交一份Hibernate错误报告,序列生成器名称未正确引用。 – 2012-08-06 00:30:27