Возможно ли в простых расширениях JPA или JPA + Hibernate использовать внешний ключ, который также является частью составного первичного ключа?
@TableGenerator(name = "trial", table = "third",
pkColumnName = "a" , valueColumnName = "b", pkColumnValue = "first")
@Entity
public class First{
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "trial")
protected int a;
@OneToMany(mappedBy ="first", cascade = CascadeType.PERSIST)
@JoinColumn(name = "a")
protected List<Second> seconds;
}
class IDC implements Serializable{
//@Column(name = "a", insertable = false, updatable = false)
protected int a;
protected int b;
}
@Entity
@IdClass(IDC.class)
public class Second{
@Id
//@Column(name = "a", insertable = false, updatable = false)
protected int a;
@Id
protected int b;
@ManyToOne
@JoinColumn(name = "a"/*, insertable = false, updatable = false*/)
First first;
}
главный:
public class Persister {
public static void main(String[] args) {
First aFirst = new First();
Second aSecond = new Second();
aSecond.b = 300;
List<Second> scnds = new ArrayList<Second>();
scnds.add(aSecond);
aFirst.seconds = scnds;
aSecond.first = aFirst;
aEntityManager.getTransaction().begin();
aEntityManager.persist(aFirst);
aEntityManager.getTransaction().commit();
}}
Проблема в классе "Второй":
Если я установил «inserttable = false, updatable = false» в поле «a», он выдаст исключение:
"Индекс параметра выходит за границы. 4 не находится между допустимыми значениями от 1 до 3"
И если я установлю «inserttable = false, updatable = false» в отношении @manyToOne, он запустится, но установит 0 в «a» для таблицы «Second»
Цель: установить сгенерированное значение First.a в Second.a.
/////////////////////////////
sql для создания БД:
сначала создать таблицу (
Int,
первичный ключ (а)
);
создать таблицу секунд (
Int,
б инт,
первичный ключ (а, б)
);
создать таблицу третью (
Varchar (20),
б инт
);
пожалуйста ... помогите
Спасибо заранее