用于Mysql的Oracle Sequence模拟

时间:2017-03-28 08:03:34

标签: java mysql oracle hibernate

我使用Hibernate 4和Oracle 11g。这个二重奏有一个方便的功能。我可以整齐地指出如下:

@Entity
@Table(name = "APPLICATION", schema = "PRODUCTION")
public class ApplicationVersionModel {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PRODUCTION.SEQUENCE_NEW")
    @SequenceGenerator(name = "PRODUCTION.SEQUENCE_NEW", schema = "PRODUCTION", sequenceName = "PRODUCTION.SEQUENCE_NEW", allocationSize = 1)
    @Column(name = "ID")
    @XmlTransient
    @Getter @Setter private Long id;

并描述数据库中的序列:

CREATED         27.02.17
LAST_DDL_TIME   27.02.17
SEQUENCE_OWNER  PRODUCTION
SEQUENCE_NAME   SEQUENCE_NEW
MIN_VALUE       1
MAX_VALUE       9999999999999999999999999999
INCREMENT_BY    1
CYCLE_FLAG      N
ORDER_FLAG      N
CACHE_SIZE      20
LAST_NUMBER     957101
PARTITION_COUNT 
SESSION_FLAG    N
KEEP_VALUE      N

这样组合将允许我在多线程环境中使用该应用程序。同时访问用户将获得唯一的ID,不会对冲突构成威胁。 The documentation明确声明了此功能。

那么,Hibernate和Mysql对中是否有类似的功能?任何建议都非常感谢。非常感谢提前。

1 个答案:

答案 0 :(得分:0)

如果您使用序列为单个表生成唯一ID,则MySQL的auto_increment将提供相同的功能。

在SO中对How to annotate MYSQL autoincrement field with JPA annotations问题的接受答案描述了如何在hybernate中使用MySQL的auto_increment:

  

要使用MySQL AUTO_INCREMENT列,您应该使用   IDENTITY策略:

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
     

AUTO与MySQL一起使用时,您将获得以下内容:

@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
     

实际上相当于

@Id @GeneratedValue
private Long id;