微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用'in'运算符的Spring JPA查询问题

如何解决使用'in'运算符的Spring JPA查询问题

在Spring Intreface中,我有以下代码

@Query("select gl from GroupEntity gl where ?1 in gl.contacts ")
List<GroupEntity> findGroupsByContact(ContactEntity contactEntity);

并想查找所有具有联系人的组,但是IntelliJ提示在where条件之后显示错误(gl.contacts中的?1)并显示错误

'(' or <input parameter> expected,got 'gl'

解决方案是什么?

实体的相关部分是:

@Entity
@Table(name = "contactGroup")
public class GroupEntity {
...
    @ManyToMany(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
    private List<ContactEntity> contacts;
...
}

但是在ContactEntity中,GroupEntity没有使用@ManyToMany(这是问题的根源吗?)

@Entity
@Table(name = "contact")
public class ContactEntity {
...
}

解决方法

当实体属性是正确的操作符时,不能使用in JPQL运算符。

您应该改用member of。 当您向查询提供值时,应使用“成员”来检查它是否属于您实体中的某个集合。 当您向查询提供值列表时,应使用“输入”,以检查实体中的属性是否属于此列表。

示例:

@Entity
public class EntityA {

@Id
private String id;

@ManyToMany(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
private List<EntityB> entities;

}

JPQL:

SELECT a FROM EntityA a WHERE a.id IN :ids

SELECT a FROM EntityA a WHERE :b MEMBER OF a.entities
,

如果关系建立正确,则可以从联系人存储库中查询组。

Group.java

  @OneToMany(fetch=FetchType.EAGER,cascade = CascadeType.ALL,mappedBy = "group",orphanRemoval = true)
    List<Contact> contacts = new ArrayList<Contact>();

Contact.java

@ManyToOne
Group group;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。