Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于实体列表查找实体_Java_Hibernate_Jpa_Domain Driven Design - Fatal编程技术网

Java 基于实体列表查找实体

Java 基于实体列表查找实体,java,hibernate,jpa,domain-driven-design,Java,Hibernate,Jpa,Domain Driven Design,假设我们有组->成员(许多) 对于给定的一组成员,最实用的方法是什么来确定是否为这些成员创建了一个组?(无额外或缺席成员) 这感觉是错误的,因为组似乎是由其状态定义的,但系统要求我们对于特定的成员组合(包括顺序!)只能有一个组 编辑: 我正在寻找一种使用JPA实现这一点的方法-因此Set.retainal似乎不适用 我想说的是,这将是完美的: List<Member> members; ... // members gets assigned TypedQuery<Grou

假设我们有组->成员(许多)

对于给定的一组成员,最实用的方法是什么来确定是否为这些成员创建了一个组?(无额外或缺席成员)

这感觉是错误的,因为组似乎是由其状态定义的,但系统要求我们对于特定的成员组合(包括顺序!)只能有一个组

编辑:

我正在寻找一种使用JPA实现这一点的方法-因此Set.retainal似乎不适用

我想说的是,这将是完美的:

List<Member> members;

... // members gets assigned

TypedQuery<Group> query = entityManager.createQuery("select g from Group g where g.members = ?", Group.class)

query.setParameter(1, members);

Group group = query.getSingleResult();
列出成员;
... // 分配成员
TypedQuery query=entityManager.createQuery(“从g组中选择g,其中g.members=?”,Group.class)
query.setParameter(1,成员);
Group Group=query.getSingleResult();
当然,这不是它的工作原理。考虑最坏的执行< /P>
List<Group> groups = entityManager.createQuery("select g from Group g", Group.class).getResultList();

for (Group g: groups) {
    if (g.getMembers().equals(members)) {
        return g;
    }
}
List groups=entityManager.createQuery(“从组g中选择g”,Group.class).getResultList();
对于(g组:组){
if(g.getMembers().equals(members)){
返回g;
}
}

在这两个集合之间一定有我遗漏的东西。

你可以用你的两个集合尝试
Set.removeAll()
Set.retainal()

使用散列,正如我在之前的评论中所说,是我能找到的唯一一种让我相信不可能通过集合进行查询的方法。

到目前为止,我想到的一种黑客方法是存储散列,然后完全验证成员集合(以防止散列冲突)。你只是在寻找查找机制吗,或者您也希望阻止应用程序在多线程环境中创建两个具有相同成员的组?只需使用查找机制就可以了-只需处理一组必须分组的项目列表,但如果我们处理一组已经搜索过的项目列表,我们必须更新该组,而不是创建一个新组。如果我让一个成员知道他们的组,那么我想我可以选择每个成员,选择组,然后递归地将每个列表交给下一个,如果没有常见的组,则创建它,否则,验证组中的成员数是否与正在测试的成员数相同(以防止较大的组匹配应视为不同组的成员子集)。我将不得不针对hash hack进行测试,看看什么性能更好。谢谢,但我的意思是从JPA查询本身开始。我已经更新了我的问题,希望能更清楚。很抱歉给你带来了困惑。