Ho due campi di una classe di entità che non voglio essere univoco ma che devono essere usati come campi compositi per una chiave che deve essere essa stessa unica. Ad esempio, ho due campi (nome e versione) che possono essere gli stessi per altri record, ma insieme devono essere unici. Qual è il modo migliore per farlo usando Hibernate (con annotazioni)? Sto usando Hibernate Validator per altri campi ma non sono sicuro di un modo per usarlo per convalidare che due campi insieme compongono una chiave univoca. Sto usando una classe di entità generica che ha un tipo generico id che può essere scambiato per una classe di chiavi composite ma devo ancora farlo funzionare molto bene.Come ottenere una chiave univoca per due campi con Hibernate?
risposta
Questo creerà una chiave univoca sul database:
@Table(name = "MYTABLE",
uniqueConstraints = { @UniqueConstraint(columnNames = { "NAME", "VERSION" }) })
Questo sarà applicata dal database su un aggiornamento o persistono.
Avresti bisogno di scrivere il tuo validatore personalizzato se volevi far rispettare questo usando Hibernate Validator.
e cosa dovrebbe essere scritto nell'entità come pk? ... se il pk è nome e versione –
@ yoav.str - Se il PK è il nome e la versione dovresti invece usare una chiave primaria composita con @ Id/@ IdClass o @ EmbeddedId/@ Embeddable – mtpettyp
Questo ha funzionato per me usando Hibernate 3.6.3.Final. Grazie! – Jorge
Di solito i due campi vengono racchiusi in una classe di chiave interna contrassegnata come @Embeddable. Ad esempio:
@Entity
public class Foo {
@EmbeddedId()
private Key key;
...
@Embeddable
public static class Key {
@Column(nullable=false)
private String name;
@Column(nullable=false)
private int version;
protected Key() {
// for hibernate
}
public Key (String name, int version) {
this.name = name;
this.version = version;
}
...
// You probably want .equals and .hashcode methods
}
}
- 1. hibernate convalida chiave univoca
- 2. SQLite chiave univoca con una combinazione di due colonne
- 3. Come convalidare due campi per l'univocità
- 4. Come creare una chiave univoca per un dizionario in Python
- 5. Solr Composite Chiave univoca da campi esistenti nello schema
- 6. Chiave straniera Mysql con chiave non univoca - come è possibile?
- 7. SQL - Come ottenere Colonna nome della chiave univoca dalla tabella
- 8. Modificare una tabella live per rendere una chiave non univoca
- 9. Come posso passare due campi di una riga univoca all'interno di un commit utilizzando SQLAlchemy?
- 10. MySQL - Chiave univoca composita con datetime
- 11. Creazione della chiave univoca MongoDB con C#
- 12. Hibernate 3 composita una chiave con GeneratedValue
- 13. Unire tra due campi non chiave
- 14. Dichiarare chiave univoca come int nei risultati Solr per errore
- 15. Hibernate chiave esterna con una parte della chiave primaria composita
- 16. Come aggiungere una chiave univoca alla tabella esistente (con righe non univoche)
- 17. BCNF con una chiave surrogata e due chiavi uniche
- 18. Come aggiungere un'associazione EF6 a una chiave candidata/chiave univoca che non è la chiave primaria?
- 19. Campi di raccolta persistenti con hibernate
- 20. Differenza tra chiave primaria, chiave univoca e chiave candidata
- 21. MySQL PHP Copia una riga all'interno della stessa tabella ... con una chiave primaria e univoca
- 22. Collezione Java - Chiave univoca e valore univoco
- 23. Verificare se esiste una chiave indice univoca in Laravel
- 24. validatore sqlalchemy per due campi
- 25. Hibernate: inserire i dati con chiave esterna
- 26. aggiornamento SQLAlchemy se chiave univoca esiste
- 27. Cambia chiave univoca insieme in mysql
- 28. Come ottenere un'aggregazione Elasticsearch con più campi
- 29. I duplicati di Mongoose con la chiave dello schema univoca
- 30. Creazione della chiave univoca nella tabella MySQL riferita alla data
Vuoi un "vincolo univoco" su due colonne o una "chiave primaria" sulla tabella che consiste di due colonne? –
Voglio un vincolo univoco su due colonne. Ad esempio la combinazione di nome e versione deve essere unica. Quindi potrei avere due record nella tabella con il record n. 1 (name = abc/version = 1) e con il record n. 2 (name = abc/version = 2), ma non due record nella tabella con il record n. 1 (nome = abc/version = 1) e con il record # 2 (name = abc/version = 1). –