您也许可以使用“
guid”生成器。请参阅Hibernate论坛中的这篇文章。看起来他们曾经使用过
SYS_GUID()一段时间增加了对Oracle的支持,但是文档仍然说它们仅支持SQL Server和MySQL。
我还没有使用JPA批注,但这是使用XML配置的示例:
<id name="PRODUCT_ID"> <generator /></id>
编辑: 关于第二个问题,我想你是在问为什么Hibernate无法做这样的事情:
INSERT INTO PRODUCT (PRODUCT_ID, )SELECT SYSGUID(),
原因是Hibernate必须知道对象的ID是什么。例如,请考虑以下情形:
- 您创建一个新的Product对象并保存。Oracle分配ID。
- 您从hibernate会话中分离产品。
- 您稍后重新连接它并进行一些更改。
- 现在,您要保留这些更改。
在不知道ID的情况下,Hibernate无法做到这一点。它需要ID才能发出UPDATE语句。因此,实施必须
org.hibernate.id.GUIDGenerator先生成ID,然后再在INSERT语句中重新使用它。
这就是为什么如果您使用数据库生成的ID(包括在支持它的数据库上自动递增),则Hibernate无法进行 任何批处理的
原因相同。当一次插入很多对象时,使用一种hilo生成器或其他一些Hibernate生成的ID机制是获得良好性能的唯一方法。



