如何在JDL-Studio中为2列创建唯一约束?

时间:2016-09-04 10:33:15

标签: jhipster

我有以下实体配置:

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中无法做到这一点,还有其他方法可以做到这一点吗?

3 个答案:

答案 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>