【问题标题】:How do I keep the last reference of @ManyToOne in JPA?如何在 JPA 中保留 @ManyToOne 的最后一个引用?
【发布时间】:2015-11-18 07:35:55
【问题描述】:

我想创建两个具有@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 类的最后一个引用。我可以通过在 ClassB 中添加 @OneToOne public ClassA lastClassA; 来做到这一点(就像 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。发生这种情况是因为我在另一个表中没有引用。

【问题讨论】:

标签: java hibernate jpa spring-boot


【解决方案1】:

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

  1. 将集合标记为“超延迟”,这将允许您访问列表中的最后一项,而无需加载整个集合。但是,如果您确实需要加载集合中的其他项目,这可能会出现问题。

https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html

“超懒”集合抓取:单个元素 根据需要从数据库访问集合。休眠尝试 不要将整个集合提取到内存中,除非绝对 需要。适合大型收藏。

  1. 如果您只需要最后一项,则使用 Hibernate @Where 子句过滤集合

https://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/

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

【讨论】:

  • 嗯,我认为您可以使用任何一种建议的方法来实现。
  • 是的,我可以使用@Where 子句来做到这一点。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-04
  • 2018-07-22
  • 1970-01-01
相关资源
最近更新 更多