我在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;
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试将此字段设置为非唯一值的对象持久化时,当EJB容器管理的事务提交时,我得到一个异常(如预期的那样).
我有两个问题需要解决:
1)我得到的例外是无用的"javax.ejb.EJBException:Transaction aborted".如果我递归调用getCause()足够多次,我最终会得到更有用的"java.sql.SQLIntegrityConstraintViolationException",但是这个异常是EclipseLink实现的一部分,我真的不习惯依赖它的存在.
有没有更好的方法来获取JPA的详细错误信息?
2)EJB容器坚持记录此错误,即使我抓住它并处理它.
有没有更好的方法来处理这个错误,这将阻止Glassfish使用无用的异常信息混乱我的日志?
谢谢.