Я использую Hibernate с JPA 2.1, и я хочу определить объект с двумя субиндексами. Моя проблема в том, что я хочу определить UniqueConstraint с двумя столбцами: One MemberField и DiscriminatorColumn.JPA Entity Inheritance and UniqueConstraint with DiscriminatorColumn
EDIT: Поскольку ответ Николая решить мою конкретную проблему, я изменил тип родительского класса от абстрактного к неабстрактному.
Мой код выглядит следующим образом:
Родитель
@Entity
@Inheritance
@DiscriminatorColumn(name = "TYPE")
@Table(name = "EXAMPLE", uniqueConstraints = @UniqueConstraint(columnNames = { "TYPE", "NAME" }))
public class ExampleParent extends AbstractEntity
{
private static final long serialVersionUID = 68642569598915089L;
@Column(name = "NAME", nullable = false, length = 30)
@NotNull
private String name;
...
}
Ребенок 1
@Entity
@DiscriminatorValue("TYPE1")
public class Example1 extends ExampleParent
{
private static final long serialVersionUID = -7343475904198640674L;
...
}
Ребенок 2
@Entity
@DiscriminatorValue("TYPE2")
public class Example2 extends ExampleParent
{
private static final long serialVersionUID = 9077103283650704993L;
...
}
Теперь я не хочу UniqueConstraint на имя ExampleParent, потому что я хочу иметь возможность сохранять два объекта Example1 и Example2 с тем же именем. Следующий код должен объяснить:
@Autowired
Example1Repository example1Repo;
@Autowired
Example2Repository example2Repo;
Example1 example1 = new Example1();
example1.setName("example");
example1Repo.save(example1);
Example2 example2 = new Example2();
example2.setName("example");
example2Repo.save(example2);
Так что моя цель состоит в том, чтобы установить UniqueConstraint из двух столбцов, но я на самом деле хочу использовать DiscriminatorColumn и поле моего ExampleParent. Комбинация DiscriminatorColumn и имя должно быть уникальным.
Мой код не работает, поэтому какие у меня варианты?
с вашим кодом выше, вы получите исключение ConstraintViolationException? Вы имеете в виду, что вы не можете вставлять Example1 и Example2 с тем же именем? –
@ oliv37 Да Я получаю ConstraintViolationException: Повторяющаяся запись «пример» для ключа ... – shinchillahh