如何解决JPA:检查Collection是否具有具有属性的成员
在我的软件中,我有一个实体(简称为describe('ResultRetriever',() => {
let retriever: ResultRetriever;
let db: Database;
beforeEach(() => {
db = new MockDatabase();
retriever = new ResultRetriever(db);
});
...
});
)和另一个实体(简称为Member
)的集合。我需要编写的查询应返回所有不包含具有特定属性值的State
成员(例如State
)。
以下是实体的相关部分:
5
请注意,public class Member {
@JoinColumn(name = "MEMBER_ID")
@OneToMany
private List<State> states;
@Column
private String name;
}
public class State {
@Column
private int property;
}
和Member
之间没有双向映射,该映射在关系(State
)的非所有权方声明。在SQL中,我将创建如下查询:
Member
但是我不知道在没有关系的拥有方的映射的情况下在JPQL中实现相同功能的任何方法。有什么方法可以做到而又不必麻烦双向映射吗?
解决方法
JPA允许在子查询from子句中使用集合引用,因此您可以使用此:
SELECT m.name
FROM Member m
WHERE NOT EXISTS(
SELECT 1
FROM m.states s
WHERE s.property = 5
)
这将完全生成所需的SQL。
,尝试这样的事情
select m.name from Member m where not exists(
from Member m1 join m1.states s where s.property = 5
)
或
select m.name from Member m where m.id not in(
select m1.id from Member m1 join m1.states s where s.property = 5
)
,
您可以这样编写本机查询
从没有成员名的成员中选择名称(从州中选择ID 其中property = 5)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。