JPA注释和ConstraintViolationException

时间:2013-05-05 15:20:44

标签: java jpa constraints unique-constraint

这个问题一再被提及/提及,但我无法找到我做错了什么或问题是“真实的”: 我有一个简单的Oracle表的实体类,其中有一个字段应该是唯一的。 它在DB中具有唯一约束。 在实体定义中,我添加了JPA注释 -

@Entity
@Table(name = "tbl", uniqueConstraints = @UniqueConstraint(columnNames = "uni_field"))
public class MyTable implements Serializable {
...
@Column(name = "uni_field", unique = true)
@NotNull(message = "Field is required.")
    private String field;
...

我正在使用JBoss 问题是我总是在hibernate异常中结束,如果我想知道约束违规,我会把它绑定到JPA实现。 有没有办法在这种情况下捕获持久性expcetion并提供用户友好的消息? 如果不是@Column(name = "uni_field", unique = true)uniqueConstraints = @UniqueConstraint(columnNames = "uni_field")

中的用途

1 个答案:

答案 0 :(得分:0)

如果您想要在注释中定义“显示是必填字段”消息,您可以像这样捕获您的异常:

catch(javax.validation.ConstraintViolationException cve){
  Set<ConstraintViolation<?>> cvs = cve.getConstraintViolations();
  String errMsg = "";
  for (ConstraintViolation<?> cv : cvs) {    
    errMsg = cv.getMessage();
  }
}

供参考,请查看OpenJPA Bean Validation Primer