如何在JPA中保留@ManyToOne的最后一个引用?

时间:2015-11-18 07:35:56

标签: java hibernate jpa spring-boot

我想创建两个具有@OneToMany@ManyToOne关系的类。以下是示例代码。

@Entity
public class ClassA {
   @Id
   public Long id;

   @ManyToOne
   public ClassB classB;

   public String something;
}

@Entity
public class ClassB {
   @Id
   public Long id;

   @OneToMany(mappedby = "classB")
   public List<ClassA> classAList = new ArrayList<>();

   public String somet;
}

该代码工作得很好但是,我希望在B类中有A类的最后一个引用。我可以通过在@OneToOne public ClassA lastClassA;中添加ClassB来实现这一点(就像here) 。以下是代码:

@Entity
public class ClassA {
   @Id
   public Long id;

   @ManyToOne
   public ClassB classB;

   public String something;
}

@Entity
public class ClassB {
   @Id
   public Long id;

   @OneToMany(mappedby = "classB")
   public List<ClassA> classAList = new ArrayList<>();

   @OneToOne
   public ClassA lastClassA;

   public String somet;
}

该代码正在运行。当我向其中任何一个插入数据时出现问题,我收到以下错误:foreign key constraint fails。之所以发生这种情况,是因为我在另一张表中没有引用。

1 个答案:

答案 0 :(得分:0)

目前尚不清楚您想要做什么,但是如果您想要引用该集合中的最终项目,则可以使用一些选项。

  1. 将收藏品标记为“超级懒惰”&#39;这将允许您访问列表中的最后一项而不加载整个集合。如果您确实需要加载集合中的其他项目,则可能会出现问题。
  2. https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html

      

    &#34;特懒惰&#34;集合提取:个人元素   根据需要从数据库访问集合。 Hibernate尝试   除非绝对,否则不要将整个集合提取到内存中   需要。它适用于大型系列。

    1. 如果您只需要最后一项,请使用Hibernate @Where子句过滤集合
    2. https://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/

      1. 创建数据库视图以过滤最新项目并将其他实体映射到该项目。