multi-column UniqueConstraint avec nullable column
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:
Code:
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; |
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:
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 |
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?
Merci d'avance.