簡體   English   中英

Hibernate不使用Liquibase中定義的序列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM