Hibernate不使用Liquibase中定义的序列

时间:2018-02-08 13:44:05

标签: java hibernate 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>

问题在于,无论何时向DB插入新实体,它都会忽略Liquibase序列,从50开始,对任何新插入都增加50。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

使用@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是hibernate的HILO机制,默认情况下,它使用默认分配大小50,这就是为什么你看到id值中的空白ID为数据库的原因。

答案 1 :(得分:0)

只需添加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 is 50的默认值。