这个问题一再被提及/提及,但我无法找到我做错了什么或问题是“真实的”: 我有一个简单的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")
?
答案 0 :(得分:0)
如果您想要在注释中定义“显示是必填字段”消息,您可以像这样捕获您的异常:
catch(javax.validation.ConstraintViolationException cve){
Set<ConstraintViolation<?>> cvs = cve.getConstraintViolations();
String errMsg = "";
for (ConstraintViolation<?> cv : cvs) {
errMsg = cv.getMessage();
}
}