Jpa 具有两个相同类型字段的类之间的连接

Jpa 具有两个相同类型字段的类之间的连接,jpa,join,Jpa,Join,我有以下课程: @Entity @Table(name = "entity") public class Entity extends Model { @ManyToMany(fetch = FetchType.EAGER) @JoinTable(name = "entity_owner", joinColumns = @JoinColumn(name = "entity_id"), inverseJoinColumns = @JoinColumn(n

我有以下课程:

@Entity
@Table(name = "entity")
    public class Entity extends Model
    {
       @ManyToMany(fetch = FetchType.EAGER)
       @JoinTable(name = "entity_owner", joinColumns = @JoinColumn(name = "entity_id"), inverseJoinColumns = @JoinColumn(name = "user_id"))
       private Set<UserAccount> owners;

       @ManyToMany(fetch = FetchType.EAGER)
       @JoinTable(name = "entity_assignee", joinColumns = @JoinColumn(name = "entity_id"), inverseJoinColumns = @JoinColumn(name = "user_id"))
       private Set<UserAccount> assignees;
    }

有人能告诉我我做错了什么吗?

如果UserAccount同时位于所有者和受让人中,则查询似乎会复制一个结果,您可以使用DISTINCT筛选重复的结果:

SELECT DISTINCT r FROM ...

当已有UserAccount实例可用于筛选结果时, 表达式可用于:

SELECT DISTINCT(e) 
FROM SomeEntity e 
WHERE :someUser MEMBER OF e.assignees OR 
      :someUser MEMBER OF e.owners

UserAccount ua ...
em.createQuery(jpql).setParameter("someUser", ua)
若由于某种原因,首选类似于原始查询的查询,那个么添加DISTINCT就足够了

SELECT DISTINCT(e) 
FROM SomeEntity e 
WHERE :someUser MEMBER OF e.assignees OR 
      :someUser MEMBER OF e.owners

UserAccount ua ...
em.createQuery(jpql).setParameter("someUser", ua)