告诉 JPA 提供程序在将新创建的实体插入数据库时使用表从中获取 ID。@GeneratedValue(strategy=GenerationType.TABLE)
使用 Hibernate 作为提供程序时,这将生成一个包含两列的表:实体名称和已分配给此实体的最大标识。在这里,似乎Hibernate无法成功地从中获取实体的下一个ID,但很难确切地说出原因,因为您没有为此提供足够的信息。hibernate_sequences
那么,您能提供完整的堆栈跟踪吗?另外,请在将属性设置为的情况下将日志记录设置为 并设置正确的日志级别 。如果可能的话,将日志加入您的问题。hibernate.show_sql
true
log4j.logger.org.hibernate.SQL=DEBUG
也许只需检查您是否为Oracle配置了正确的配置。实际上,如果可能的话,也加入您的休眠配置。hibernate.dialect
PS:使用Oracle生成PK的“传统”方法是使用序列(您可以让Hibernate猜测数据库类型的最佳策略使用或强制使用),但我假设您希望结果数据结构与数据库无关。如果没有,我建议改用序列。GenerationType.AUTO
SEQUENCE
编辑:回答OP关于.实际上,默认值是调用单个全局序列,这可能是一个问题。但是,通过如下所示的设置,对于数据库使用序列的情况,您可以使用并仍然控制序列的名称:GenerationType.AUTO
hibernate_sequence
GenerationType.AUTO
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="my_entity_seq_gen")
@SequenceGenerator(name="my_entity_seq_gen", sequenceName="MY_ENTITY_SEQ")
private long id;
换句话说,您可以对每个表使用不同的序列名称,而不会失去可移植性。