Spring-data-JPA:加入查询最佳实践

时间:2018-01-24 07:06:45

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

我有两张桌子T1和T2。

enter image description here

我必须从表T1中获取记录,其中anotherColumn在T2中为空或在T2中不存在。

表T1与T2的实体关系

let mapping = ["UGC":"Cysteine", "UGG" : "Tryptophan"]

let text = "UGCUGGAAUUUAGCAGCCCAU"

let characters = text.characters

var index = 0

while index < characters.count {
    let start = text.index(text.startIndex, offsetBy: index)

    var endOffset = index+3
    if index+3 > characters.count {
       endOffset = characters.count
    }

    let end = text.index(text.startIndex, offsetBy: endOffset)
    let range = start..<end

    let groupedSubstring = text[range]
    print(mapping[groupedSubstring] ?? groupedSubstring)
    index = index + 3
}

表T2与T1的实体关系

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

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

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

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

@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(); 

1 个答案:

答案 0 :(得分:1)

这就是你要找的东西

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

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