Considere la siguiente clase de entidad, que se utiliza con, por ejemplo, EclipseLink 2.0.2, donde el atributo link
no es la clave principal, sino único.Infracciones de restricción de captura en JPA 2.0
@Entity
public class Profile {
@Id
private Long id;
@Column(unique = true)
private String link;
// Some more attributes and getter and setter methods
}
Al insertar registros con un valor duplicado para el atributo link
, EclipseLink no significa lanzar una EntityExistsException
, pero lanza un DatabaseException
, con el mensaje que explica que la restricción única se violó.
Esto no parece muy útil, ya que no habría una manera simple, independiente de la base de datos, de detectar esta excepción. ¿Cuál sería la forma recomendada de lidiar con esto?
Un par de cosas que he consideradas son:
- Comprobación del código de error en el
DatabaseException
- Me temo que este código de error, sin embargo, es el código de error nativo para la base de datos; - Comprobando la existencia de un
Profile
con el valor específico paralink
de antemano, esto obviamente resultaría en una enorme cantidad de consultas superfluas.
He enviado un error para este problema. Vota por ello para que podamos solucionar este problema: https://bugs.eclipse.org/bugs/show_bug.cgi?id=375745 – sdoca