[英]Hibernate not using sequence defined in Liquibase
我在liquibase
更改日志中定義了一個序列,但是看起來Hibernate
在插入實體時會忽略它。
Liquibase中定義的序列如下所示。
<createSequence cycle="false" incrementBy="1"
startValue="1" maxValue="9223372036854775807" minValue="1"
sequenceName="seq_vehicle" />
並在Entity類中。
@Entity
@Table(name = "VEHICLE")
public class Vehicle {
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "VEHICLE_SEQ")
@SequenceGenerator(name = "VEHICLE_SEQ", sequenceName = "SEQ_VEHICLE")
private Long id;
我還將此屬性添加到了hibernate.cfg.xml
<property name="hibernate.id.new_generator_mappings">false</property>
問題在於,無論何時將新實體插入數據庫,它都將忽略Liquibase序列,並且從50開始,對於任何新插入,以50遞增。 我該如何解決?
使用@GenericGenerator
而不是@SequenceGenerator
。
@Id
@Column
@GenericGenerator(
name = "VEHICLE_SEQ",
strategy = "sequence",
parameters = {
@org.hibernate.annotations.Parameter(name = "sequence", value = "SEQ_VEHICLE")
}
)
@GeneratedValue(generator = "VEHICLE_SEQ")
private Long id;
@SequenceGenerator
在您的情況下是休眠的HILO機制,默認情況下使用默認分配大小50,這就是為什么您看到id值與數據庫ID不一致的原因。
只需添加allocationSize = 1
:
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "VEHICLE_SEQ")
@SequenceGenerator(name = "VEHICLE_SEQ", sequenceName = "SEQ_VEHICLE", allocationSize = 1)
private Long id;
作為@veljkost解釋,為默認值allocationSize
為50 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.