У меня есть сущность jpa "пользователь", у которой есть 2 бизнес-ключа: имя пользователя и адрес электронной почты. Эти 2 поля уникальны, и я попытался определить оба поля как naturalId с @NaturalId, однако, когда я выполняю поиск сущности пользователя, передавая только имя пользователя или электронную почту, hibernate выдает исключение с жалобой на отсутствующее значение другого naturalid, поскольку hibernate обрабатывает оба поля как составной естественный идентификатор. Это ограничение гибернации или есть альтернатива для решения этой ошибки?
@Entity
@Table(name = "user",
indexes = { @Index(columnList = "login"),
@Index(columnList = "email")},
uniqueConstraints = { @UniqueConstraint(columnNames = { "login" }),
@UniqueConstraint(columnNames = { "email" })})
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@org.hibernate.annotations.NaturalIdCache
public class User {
@org.hibernate.annotations.NaturalId(mutable = true)
private String login;
@org.hibernate.annotations.NaturalId(mutable = true)
private String email;
...
}
Когда я вызываю код ниже:
User entity = em.unwrap(Session.class)
.byNaturalId(User.class)
.using("login", "abc123")
.load();
или
User entity = em.unwrap(Session.class)
.byNaturalId(User.class)
.using("email", "abc123@xyz.com")
.load();
Я обнаружил ошибку с жалобой на отсутствие другого натурального идентификатора. Я должен установить оба природных идентификатора, который не был тем, что я хочу
User entity = em.unwrap(Session.class)
.byNaturalId(User.class)
.using("login", "abc123")
.using("email", "abc123@xyz.com")
.load();