0

I have a standard User entity, with a name, mobile phone number, and email address. Of course, I don't want any duplication in the email address, but I also don't want it to be required. I'm not sure if a unique constraint lets multiple records be blank. (Wouldn't that violate uniqueness?) Is this even possible? If so, how do I specify this constraint in JPA?

MiguelMunoz
  • 4,548
  • 3
  • 34
  • 51

3 Answers3

1

In a word - yes, this is possible. Uniqueness means the column can't have two equal values. nulls in SQL are not values - they are the lack thereof. Since they are not values, they don't affect the uniqueness, and a unique column can have as many nulls as you like.

In JPA, you can specify this with the unique attribute of the @Column annotation:

@Column(unique=true)
String email;
Mureinik
  • 297,002
  • 52
  • 306
  • 350
  • `Since they are not values, they don't affect the uniqueness, and a unique column can have as many nulls as you like` => [Counterexample](https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=6bd76d0895e38e02027202d05693dec8). It depends on RDBMS, but could be easily resolved with filtered unique index – Lukasz Szozda Jan 05 '21 at 20:42
0

Unique constraint won’t allow multiple null valujes but there is a solution for that - https://www.red-gate.com/simple-talk/blogs/allow-nulls-unique-fields/

Josef Veselý
  • 102
  • 1
  • 4
0

Using a unique constraint on the email column will do what you want. This has been answered previously here - Allow null in unique column.

@Column(unique=true)
String email;