java - 如何在jpa/hibernate中实现这个简单的关联

标签 java hibernate jpa associations

我有 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 列的名称可以通过 @JoinColumnname 属性显式定义。如果未指定@JoinColumn,则此 FK 列将使用默认值,该值与“一侧表”的名称、_(下划线)和该 FK 列的名称连接起来“一 table ”PK。

  • @OneToMany 定义 B 类与 A 类的关系是一对多。

关于java - 如何在jpa/hibernate中实现这个简单的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8280655/

相关文章:

java - 为什么 SpEL 在 Spring Boot 和 Spring Cloud Stream @SendTo 中不起作用

java - 我在 getInputStream() 和 getOutputStream 方法上遇到错误?

hibernate 异常 : No session currently bound to execution context

java - 如何将 JPA 元组结果投影到实体中

java - EJB-QL 3 中的 MEMBER OF 不起作用

java - AOP - 错误 : java. lang.StackOverflowError 在 org.aspectj.runtime.internal.AroundClosure

java - log4j API中FileAppender的疑问

mysql - 如何删除连接表中的行?

java - 搜索一个属性String类型,一些带有hql的字符用于hibernate

java - 尽管使用@inheritance 插入了冗余的 id 值