我有 2 个测试类:
Class A{
B b;
// some other properties
}
Class B{
// some properties
}
A 的每个实例只有一个 B 类的实例,但 B 类的一个实例可以分配给 A 类的多个实例
喜欢:
B b = new B();
A a1 = new A();
a1.setB(b);
A a2 = new A();
a2.setB(b);
这是什么类型的关联?
起初我正在考虑一对一的单向,但也许是多对一?但我在 B 上没有任何 A 对象的集合。
有人可以解释一下实现此关联的正确方法是什么(使用注释)吗?
最佳答案
every instance of A has only one instance of class B, but an instance of class B can be assigned to more than one instance of class A
所以,A到B是多对一的关系。 B到A是一对多的关系。
下面展示了A和B之间使用注解的双向映射:
@Entity
@Table(name="tableA")
Class A{
@ManyToOne
@JoinColumn(name = "B_ID")
B b;
// some other properties
}
@Entity
@Table(name="tableB")
Class B{
@OneToMany(mappedBy = "b")
List Set<A> listOfA= new ArrayList<A>();
// some other properties
}
要点:
@Entity
将 java 类标记为 hibernate 实体。它映射到@Table
中指定的表的名称如果没有指定
<@Table
,默认情况下,它会映射到名称等于实体的非限定类名的表。@ManyToOne
定义 A 类与 B 类的关系是多对一的在关系数据库中,一对多关系是通过使用以下外键约束来表达的:
“多方表”有一个 FK 列,仅接受“单方表”的 PK。
此 FK 列的名称可以通过
@JoinColumn
的name
属性显式定义。如果未指定@JoinColumn,则此 FK 列将使用默认值,该值与“一侧表”的名称、_(下划线)和该 FK 列的名称连接起来“一 table ”PK。@OneToMany
定义 B 类与 A 类的关系是一对多。
关于java - 如何在jpa/hibernate中实现这个简单的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8280655/