我有以下带有 JPA 2.0 注释的 Java 类:
@Entity
public class A {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
}
B类和C类也非常相似。
接下来我有 AB 类,它有一个复合 PK(A 和 B)与 FK 到 A 和 B:
@Entity
public class AB {
@Id @ManyToOne private A a;
@Id @ManyToOne private B b;
}
接下来我有类似于 AB 的 AC 类:
@Entity
public class AC {
@Id @ManyToOne private A a;
@Id @ManyToOne private C c;
}
到目前为止,所有数据库约束都完全符合我的需要。现在我无法弄清楚的下一部分:
我有 X 课。它应该是这样的:
public class X {
private A a;
private B b;
private C c;
}
以下是要求: A 和 B 应该是复合主键,也是 AB 的复合外键。
A 和 C 应该是 AC 的复合外键。
我想不出正确的注释来完成这项工作。有什么建议么?
编辑:
那好吧。我已经手动创建了所有表,包括带有这个 DDL 的表 X:
create table X (
A_ID int not null,
B_ID int not null,
C_ID int not null,
primary key (A_ID, B_ID),
constraint `fk_ab` foreign key (A_ID, B_ID) references AB (A_ID, B_ID),
constraint `fk_ac` foreign key (A_ID, C_ID) references AC (A_ID, C_ID)
) engine=InnoDB;
并在其上运行 Hibernate 逆向工程工具。我收到一个错误:
org.hibernate.MappingException: An association from the table X refers to an unmapped class: Ac
现在,我完全被阻止了,所以我搁置了使用 JPA 的计划,而是使用 MyBatis。我想我有一个无法用 JPA 或 Hibernate 表示的模式。除非有人能证明我错了?