我试图在Oracle JPA中使用定义的序列生成,以及GenerationType。AUTO:
@Id
@SequenceGenerator(name = "MY_GEN_NAME", sequenceName = "MY_SQ_NAME")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "MY_GEN_NAME")
@Column(name = "ID", nullable = false)
private Long id;
运行hibernate验证后抛出错误:
Schema validation: missing sequence [hibernate_sequence]
我猜,它忽略了我的MY_GEN_NAME
并试图使用该全局序列进行id生成。
当我切换到GenerationType.SEQUENCE
,它使用SequenceHiLoGenerator
,它的工作很好。
为什么会发生这种情况,是否有可能使GenerationType.AUTO
与Oracle给定的序列一起工作(可能切换到其他db)?
AUTO
对JPA提供者说,"选择您想要的",并且在这种情况下它不会使用"generator"属性。
如果你想使用SEQUENCE,那么将策略设置为SEQUENCE
!这样它就会使用你已经定义的序列定义
虽然Hibernate -sequence-on-oracle-generatedvaluestrategy-generationtype-auto建议这可以工作,但对于某些版本的Hibernate来说似乎是错误的,请参阅hh -10656。