Si consideri la seguente classe di entità, utilizzata con, ad esempio, EclipseLink 2.0.2 - in cui l'attributo link
non è la chiave primaria, ma è tuttavia univoco.Violazioni dei vincoli di cattura in 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
}
Quando inserisco i record con un valore duplicato per l'attributo link
, EclipseLink non significa gettare un EntityExistsException
, ma getta un DatabaseException
, con il messaggio che spiega che il vincolo unico è stato violato.
Questo non sembra molto utile, in quanto non ci sarebbe un modo semplice, indipendente dal database, per cogliere questa eccezione. Quale sarebbe il modo consigliato per affrontare questo?
Un paio di cose che ho considerati sono:
- Verifica del codice di errore sul
DatabaseException
- temo che questo codice di errore, però, è il codice di errore nativo per il database; - Controllare l'esistenza di un
Profile
con il valore specifico perlink
in anticipo - questo ovviamente comporterebbe un'enorme quantità di query superflue.
Ho inviato un bug per questo problema. Si prega di votare per risolvere il problema: https://bugs.eclipse.org/bugs/show_bug.cgi?id=375745 – sdoca