如何在JHipster中为实体添加唯一约束?

时间:2016-04-29 16:47:16

标签: jpa constraints jhipster

我有一个名为Author的实体,如下所示。我想在字段“name”上添加一个唯一约束。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
  <tr>
    <td>1,1</td>
    <td>2,1</td>
    <td>3,1</td>
  </tr>
  <tr>
    <td>1,2</td>
    <td>2,2</td>
    <td>3,2</td>
  </tr>
  <tr>
    <td>1,3</td>
    <td>2,2</td>
    <td>3,3</td>
  </tr>
</table>

<button class="up">Up</button>

<div>
  <button class="left">Left</button>
  <button class="right">Right</button>
</div>

<button class="down">Down</button>

3 个答案:

答案 0 :(得分:8)

JHipster生成器缺乏为实体生成唯一字段的选项。要手动完成:

  1. 生成实体
  2. 在liquibase changelog xml(http://www.liquibase.org/documentation/changes/add_unique_constraint.html
  3. 中添加唯一约束
  4. 将unique = true参数添加到 @Column 注释。(https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/Column.html
  5. 我只在MySQL和PostgreSQL中对此进行了测试,我确实记得在某处读过这对某些NoSQL数据库不起作用。这也可能是它不包含在JHipster中的原因。但请不要引用我。

答案 1 :(得分:6)

当我执行上述操作时,它可以工作,但是当我尝试添加重复条目时,我收到错误:客户端上的内部服务器错误。这是太一般的错误,我想自定义它。所以我做了以下事情:

1)编辑myapp.web.rest.errors.ErrorConstants.java并添加此行以添加新的错误常量:

public static final String ERR_VALIDATION_DUPLICATE = "entity.validation.duplicate";

2)编辑myapp.web.rest.errors.ExceptionTranslator.java以添加我的错误翻译器

@ExceptionHandler(DataIntegrityViolationException.class)
    @ResponseBody
    @ResponseStatus(HttpStatus.CONFLICT)
    public ErrorVM processDataIntegrityViolationException(DataIntegrityViolationException exception) {
        return new ErrorVM(ErrorConstants.ERR_VALIDATION_DUPLICATE, exception.getMessage());
    }

3)编辑src / main / webapp / i18n / en / global.json并添加

  "entity": {
...
         "validation": {
...
            "duplicate": "This value is duplicate to existing data.",
...
}

匹配服务器端错误映射生成的密钥。 您需要添加相同的文本消息,但需要翻译为支持的所有语言。

注意: 如果要在验证异常中更具体,可以创建自己的特殊异常,扩展DataIntegrityViolationException,然后在资源类中捕获该泛型DataIntegrityViolationException并抛出新异常。当然,将其映射为1,2和3。

答案 2 :(得分:3)

这不是JHipster的问题,只有JPA。

@Column(unique=true)

请阅读JPA documentation about @Column