在 EJB/JPA 环境中优雅地处理约束冲突?
我正在 Glassfish v3 应用服务器上使用 EJB 和 JPA。我有一个实体类,我强制其中一个字段是唯一的,并带有@Column注释。
@Entity
public class MyEntity implements Serializable {
private String uniqueName;
public MyEntity() {
}
@Column(unique = true, nullable = false)
public String getUniqueName() {
return uniqueName;
}
public void setUniqueName(String uniqueName) {
this.uniqueName = uniqueName;
}
}
当我尝试将此字段设置为非唯一值的对象持久化时,当 EJB 容器管理的事务提交时,我会收到一个异常(如预期的那样)。
我想解决两个问题:
1)我得到的例外是无用的“javax.ejb.EJBException:Transaction aborated”。如果我递归调用getCause()足够多的次数,我最终会得到更有用的“java.sql.SQLIntegrityConstraintViolationException”,但这个例外是EclipseLink实现的一部分,我真的不愿意依赖它的存在。
有没有更好的方法来获取JPA的详细错误信息?
2) EJB 容器坚持记录此错误,即使我捕获并处理它。
有没有更好的方法来处理这个错误,这将阻止Glassfish用无用的异常信息弄乱我的日志?
谢谢。