【发布时间】:2015-06-25 07:59:30
【问题描述】:
我想要一个 JPA/Hibernate(最好是 JPA)注释,它可以生成列的值,它不是主键,也不是从 1 开始。
据我所见,JPA 无法使用 @GeneratedValue 和 @SequenceGenerator 和 @TableGenerator 做到这一点。或者其他任何东西。
我看到solution 有一个额外的桌子,我觉得这不太优雅。
我可以接受 Hibernate 注释,因为我已经有了 Hibernate 注释。
我想使用@Generated,但我无法让它工作,人们claim 认为这是可能的。
@Generated(GenerationTime.INSERT)
private long invoiceNumber;//invoice number
更新:一个额外的要求,如果事务回滚,我们不能在编号上有间隙。 有人吗?
【问题讨论】:
-
说“我做不到”并不是很有帮助。测试用例是什么?当您执行测试用例代码时会发生什么,您期望会发生什么?您如何配置数据库以使其在插入时生成值?
-
首先,我找不到指定初始值的地方。第二个只有这个注释我得到一个错误:java.sql.SQLException: Field 'invoiceNumber' doesn't have a default value
-
你读过 Generated 的 javadoc 吗?它说此注释用于表示“注释的属性是由数据库生成的”。所以 Hibernate 不会生成。由你来配置一个数据库触发器,它会在表中插入一行时生成这个值,并且由于注解,Hibernate 会在插入后读取这个值,以便实体具有数据库生成的值。
标签: java mysql hibernate jpa auto-increment