Bonjour,
je voudrais savoir s'il existe un moyen de spécifier en annotations JPA une contraint unique sur plusieurs colonnes dont l'une est nullable.
Voici la classe pour laquelle j'ai ce problème:
Etant donné que, pour postgresql (comme pour d'autres bases de données), NULL != NULL, postgresql permet d'insérer 2 fois le même valeurs si la colonne country est nule:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 @Entity @Table(uniqueConstraints = @UniqueConstraint(columnNames = {"key", "lang", "country"})) @NamedQueries({ @NamedQuery(name = "Message.findByLangAndCountry", query = "select m.text from Message m where key=:key and lang=:lang and country=:country"), @NamedQuery(name = "Message.findByLang", query = "select m.text from Message m where key=:key and lang=:lang and country=null") }) public class Message { @Id @GeneratedValue private long id; @Column(nullable = false) private String key; @Column(nullable = false) @Pattern(regexp = "[a-z]{2}", message = "Language code should be exactly 2 characters long") private String lang; @Column(nullable = true) @Pattern(regexp = "[a-z]{2}", message = "Country code should be exactly 2 characters long.") private String country; @Column(nullable = true) private String text;
Bien sur, je peux m'en sortir en mettant une chaîne de caractères vide à la place. Mais, par curiosité, je voudrais savoir s'il y a un moyen de spécifier cela en JPA?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 teafish=# insert into message (id, key, lang, country, text) values (nextval('hibernate_sequence'), 'label.favorites', 'fr', null, 'Favorites'); INSERT 0 1 teafish=# insert into message (id, key, lang, country, text) values (nextval('hibernate_sequence'), 'label.favorites', 'fr', null, 'Favorites'); INSERT 0 1
Merci d'avance.







Répondre avec citation
Partager