wes*_*eyy 5 java sql hibernate liquibase
我对数据库开发还很陌生,所以也许这个问题并不完全正确,但如果有人能让我更清楚一点,我将不胜感激......我已经阅读了有关序列的所有内容,以及它们的首选方式超越身份。我有一个假设性问题。如果我要使用序列与 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
}
Run Code Online (Sandbox Code Playgroud)
或其他示例:模式级别的序列生成。
变更日志.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>
Run Code Online (Sandbox Code Playgroud)
是否需要在 Liquibase 和 Hibernate 中定义序列?两者到底有什么区别?
如果您希望自动生成 id 主键,那么可以使用 Hibernate 或其他 JPA 实现按如下方式简单完成:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;
Run Code Online (Sandbox Code Playgroud)
Id 主键将为您自动生成和管理。
使用 liquibase,在您的基本变更日志 xml 文件中,只要您的数据库支持自动生成的 id,您就可以执行以下操作(许多数据库都这样做,但如果不确定,请检查):
<changeSet author="name" id="auto increment example">
<createTable tableName="users">
<column autoIncrement="true" name="id" type="SERIAL">
<constraints primaryKey="true" primaryKeyName="users_pkey"/>
</column>
<column name="some_other_column" type="VARCHAR(255)"/>
<column name="another_column" type="VARCHAR(255)"/>
</createTable>
</changeSet>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19212 次 |
最近记录: |