如何正确设置唯一数据库约束——使用 Alter Table 或在 JPA 注释中?
How to put a unique database constrain correctly – using Alter Table or in JPA annotation?
我和 MySQL/OPENJPA 一起工作。我的任务是在 table 列之一中施加唯一性。据我所知,我可以通过两种方式做到这一点。
- 使用
Alter Table <table name> ADD UNIQUE <column name>
或
- 使用 JPA 注释:
@Table(name="<table name>", uniqueConstraints=@Unique(columnNames="<column name>"))
哪种方式是正确的?或者同时使用两者?
如果您使用休眠创建数据库,您可以添加注释,如果您手动管理它,请使用更改 table。
如果您必须在生产环境中管理迁移,我会考虑使用 Liquibase,它允许您在版本控制系统中存储数据库更改的描述。
JPA 注释将仅在生成新数据库模式期间使用(因此仅当您的 persistence.xml 具有 ddl-generation create-tables 或 drop-and-create 时)。
它不会影响现有表,也不会被 JPA 检查。
因此,如果您的数据库已经存在,您需要使用 ALTER TABLE
我和 MySQL/OPENJPA 一起工作。我的任务是在 table 列之一中施加唯一性。据我所知,我可以通过两种方式做到这一点。
- 使用
Alter Table <table name> ADD UNIQUE <column name>
或
- 使用 JPA 注释:
@Table(name="<table name>", uniqueConstraints=@Unique(columnNames="<column name>"))
哪种方式是正确的?或者同时使用两者?
如果您使用休眠创建数据库,您可以添加注释,如果您手动管理它,请使用更改 table。
如果您必须在生产环境中管理迁移,我会考虑使用 Liquibase,它允许您在版本控制系统中存储数据库更改的描述。
JPA 注释将仅在生成新数据库模式期间使用(因此仅当您的 persistence.xml 具有 ddl-generation create-tables 或 drop-and-create 时)。 它不会影响现有表,也不会被 JPA 检查。
因此,如果您的数据库已经存在,您需要使用 ALTER TABLE