Я работаю с EJB и JPA на сервере приложений Glassfish v3. У меня есть класс Entity, где я заставляю одно из полей быть уникальным с аннотацией @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) Исключением я получаю unhelpful "javax.ejb.EJBException: Transaction aborted". Если я рекурсивно назову getCause() достаточно времени, я в конечном итоге дойду до более полезного "java.sql.SQLIntegrityConstraintViolationException", но это исключение является частью реализации EclipseLink, и я не очень-то уверен, полагаясь на его существование.
Есть ли лучший способ получить подробную информацию об ошибках с JPA?
2) Контейнер EJB настаивает на регистрации этой ошибки, даже если я ее поймаю и обработаю.
Есть ли лучший способ справиться с этой ошибкой, которая заставит Glassfish загромождать мои журналы бесполезной информацией об исключениях?
Спасибо.