【问题标题】:Spring-data-JPA : Join query best practicesSpring-data-JPA:加入查询最佳实践
【发布时间】:2018-01-24 07:06:44
【问题描述】:

我有两张桌子 T1 和 T2。

我必须从表 T1 中获取另一列在 T2 中为空或在 T2 中不存在的记录。

Table T1 Entity 与 T2 的关系

@OneToMany(mappedBy="t2")
private List<T2> t2s;

Table T2 Entity 与 T1 的关系

@ManyToOne
@JoinColumn(name="pId")
private T1 t1;

在上述场景中,它应该从表 T1 中返回第 2 条和第 3 条记录。

@Query("select t1 from T1 t1 where NOT EXISTS (select t2 from T2 t2 where t1.id = t2.pId) OR EXISTS (select t2 from T2 t2 where t1.id = t2.pId OR t2.anotherColumn=null)")
public List<T2> findDisconnected(); 

由于我使用的是内部子查询,因此需要更多时间。

Could please someone helps me,  
1) How can I optimize the above query? 
2) What is the best way to use join queries in Spring-data-jpa?

【问题讨论】:

  • 你的表结构不清楚。你的2张桌子之间有什么关系吗?
  • @GarimaGupta 是的,表 T2 保存表 T1 的 ID。即表T2中的第二列
  • 那么,T2 与 T1 有 ManyToOne 关系?
  • @GarimaGupta 是的,我已经添加了这些细节。请查看修改

标签: spring spring-boot spring-data spring-data-jpa


【解决方案1】:

这就是你要找的东西

select * from T1 t1 full join T2 t2 on t1.id = t2.pId where t2.anotherColumn is NULL

在这里,您完全连接两个表并获取另一列中具有空值的所有记录。

【讨论】:

  • 您能否提供一些描述。我无法正确弄清楚
  • 添加了一些描述,现在检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
  • 2019-10-03
  • 1970-01-01
  • 2020-10-02
  • 2013-05-10
  • 1970-01-01
  • 2017-11-23
相关资源
最近更新 更多