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

Pab*_*uli 3 jpa constraints jhipster

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

@Entity
@Table(name = "author")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Document(indexName = "author")
public class Author implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotNull
    @Column( name = "name")
    private String name;


    @Column(name = "birth_date")
    private LocalDate birthDate;
Run Code Online (Sandbox Code Playgroud)

Joh*_*ith 8

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

  1. 生成实体
  2. 在liquibase changelog xml中添加唯一约束(http://www.liquibase.org/documentation/changes/add_unique_constraint.html)
  3. 将unique = true参数添加到@Column注释.(https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/Column.html)

我只在MySQL和PostgreSQL中对此进行了测试,我确实记得在某处读过这对某些NoSQL数据库不起作用.这也可能是它不包含在JHipster中的原因.但不要引用我的话.


Ahm*_*mad 6

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

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

public static final String ERR_VALIDATION_DUPLICATE = "entity.validation.duplicate";
Run Code Online (Sandbox Code Playgroud)

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());
    }
Run Code Online (Sandbox Code Playgroud)

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

  "entity": {
...
         "validation": {
...
            "duplicate": "This value is duplicate to existing data.",
...
}
Run Code Online (Sandbox Code Playgroud)

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

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


Gaë*_*iou 4

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

@Column(unique=true)
Run Code Online (Sandbox Code Playgroud)

请阅读有关@Column的JPA文档