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