我有以下实体配置:
entity AirplaneModelSeat {
id Long,
seatNo String required
}
relationship ManyToOne {
AirplaneModelSeat{modelId(model)} to AirplaneModel
}
此实体配置会创建一个表:
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| seat_no | varchar(255) | NO | | NULL | |
| model_id_id | bigint(20) | YES | MUL | NULL | |
+-------------+--------------+------+-----+---------+----------------+
如何在JDL-Studio中为(seat_no,model_id_id)列组合应用唯一约束?
如果在JDL-Studioi中无法做到这一点,还有其他方法可以做到这一点吗?
答案 0 :(得分:7)
据我所知,约束不是一般方式的JDL的一部分。您可以定义验证等内容。但至于Domain,唯一约束不再是一般的,它是一个数据库级约束,必须应用它。
为此,JHipster包括Liquibase。所以你可以找到changelog,在“src / main / resources / config / liquibase”中定义实体约束,并添加一个
<addUniqueConstraint tableName="airplane_model_seat" columnNames="seat_no, model_id_id"/>
到该更改日志。
如果您已经开始使用h2磁盘持久数据库,请在再次启动应用之前制作mvn clean
/ ./gradlew clean
。
答案 1 :(得分:0)
除了David的答案中的Liquibase配置之外,我建议您还向JPA添加相关的Entity批注。这是一个示例:
@Table(name = "table_name",
uniqueConstraints = {@UniqueConstraint(columnNames = {"field_1", "field_2"})})
注意,由于在这种情况下,@UniqueConstraint
是在Entity(即Table)级别应用的,因此您可以将多个字段组合成一个复合唯一键。
答案 2 :(得分:0)
除了Oerd的答案^ _ ^除了David的答案中的Liquibase配置外,我建议您还向您的实体添加相关的JPA批注。
如果仅是为了确保字段值唯一,则可以编写
@Column(unique=true)
String username;
@UniqueConstraint注释用于在表级别注释多个唯一键。
对于Liquibase配置,仅当仅当为确保字段值唯一,您可以编写
<column name="username" type="varchar(255)">
<constraints nullable="true" unique="true" />
</column>