相关疑难解决方法(0)

优雅地处理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;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试将此字段设置为非唯一值的对象持久化时,当EJB容器管理的事务提交时,我得到一个异常(如预期的那样).

我有两个问题需要解决:

1)我得到的例外是无用的"javax.ejb.EJBException:Transaction aborted".如果我递归调用getCause()足够多次,我最终会得到更有用的"java.sql.SQLIntegrityConstraintViolationException",但是这个异常是EclipseLink实现的一部分,我真的不习惯依赖它的存在.

有没有更好的方法来获取JPA的详细错误信息?

2)EJB容器坚持记录此错误,即使我抓住它并处理它.

有没有更好的方法来处理这个错误,这将阻止Glassfish使用无用的异常信息混乱我的日志?

谢谢.

java database jpa java-ee ejb-3.0

18
推荐指数
2
解决办法
2万
查看次数

标签 统计

database ×1

ejb-3.0 ×1

java ×1

java-ee ×1

jpa ×1