我使用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对中是否有类似的功能?任何建议都非常感谢。非常感谢提前。
答案 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;