我有以下情况:
@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;
...
}
换句话说:A和B之间存在OneToOne关联。B是一个弱实体,它的Id是从A类派生的。
如本文所述,我已经测试了一些解决方案,例如在 @OneToOne 下添加 @PrimaryKeyJoinColumn 。但是我收到了这个错误:“org.hibernate.id.IdentifierGenerationException:必须在调用 save() 之前手动分配此类的 ID: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
它试图在表 B 中找到列 A(而不是 AID)。我不知道如何指定列名是 B.AID 而不是 BA