我对数据库开发很陌生,所以也许这个问题并不完全正确,但如果有人能让我更清楚一点,我将不胜感激……我已经阅读了所有关于序列的内容,以及如何他们比身份更受欢迎。我有一个假设性的问题。如果我要使用序列与 Hibernate(数据插入)和 Liquibase(模式创建)一起生成我的 PK,那么定义序列的正确位置是什么?
例如:类级别的序列生成。
用户.java
@Entity
@Table(name = "USER")
public class User {
@Id
@SequenceGenerator(name = "USER_SEQ", sequenceName = "USER_SEQ")
@GeneratedValue(strategy = SEQUENCE, generator = "USER_SEQ")
@Column(name = "ID")
private Long id;
// other fields
}
或其他示例:模式级别的序列生成。
changelog.xml
<changeSet author="wesleyy">
<createSequence catalogName="cat"
cycle="true"
incrementBy="1"
maxValue="1000"
minValue="10"
ordered="true"
schemaName="public"
sequenceName="user_seq"
startValue="1"/>
</changeSet>
是否需要在Liquibase和Hibernate中都定义一个序列?两者到底有什么区别?
最佳答案
通过 User
类中的行
@SequenceGenerator(name = "USER_SEQ", sequenceName = "USER_SEQ")
@GeneratedValue(strategy = SEQUENCE, generator = "USER_SEQ")
你说要 hibernate :对于插入数据库的每个对象 User
,从名为 USER_SEQ
的序列中为主键赋予新值。
通过将描述的 changeSet 添加到 liquibase xml 脚本中,您对 liquibase 说:如果此 changeSet 尚未应用于数据库,则下次在名为 user_seq
的数据库序列中创建。
换句话说,您在 liquibase 脚本中创建序列,并在 User
类的代码中使用它。
关于java - SQL 序列 : Hibernate and Liquibase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48571685/