У меня следующая ситуация:
@Entity
class A{
@Id
@SequenceGenerator(name = "SEQ_AID", sequenceName = "SEQ_AID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_AID")
private Long aId;
@OneToOne(fetch=FecthType.LAZY,optional=false,cascade=CascadeType.ALL)
private B b;
...
}
@Entity
class B{
@Id
private A a;
...
}
Другими словами: существует связь OneToOne между A и B. B является слабым объектом, и его Id получен из класса A.
Я уже тестировал некоторые решения, добавляя @PrimaryKeyJoinColumn в @OneToOne, как упоминается в этой статье . Но я получил эту ошибку: "org.hibernate.id.IdentifierGenerationException: идентификаторы для этого класса должны быть назначены вручную перед вызовом save (): B"
Я не знаю, насколько это актуально в этом случае, но я использую Oracle 11g.
ОБНОВЛЕНО
Я думаю, что я на правильном пути. Вот актуальное состояние моей проблемы:
@Entity
class A{
@Id
@SequenceGenerator(name = "SEQ_AID", sequenceName = "SEQ_AID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_AID")
private Long aId;
@OneToOne(fetch=FecthType.LAZY,optional=false,cascade=CascadeType.ALL)
@PrimaryKeyJoinColumn(name="aId")
private B b;
...
}
@Entity
class B{
@Id
@OneToOne
@JoinColumn(name="aId)
private A a;
...
}
Ошибка теперь немного другая:
java.sql.SQLException: ORA-00904: "B"."A": invalid identifier
Он пытается найти столбец A (вместо AID) в таблице B. Я не знаю, как указать, что имя столбца - B.AID, а не B.A.