有两个实体:
@Entity
public class Person {
@Id
Integer id;
@ManyToMany
@JoinTable(
name = "persons_addresses",
joinColumns = @JoinColumn(name = "person_id"),
inverseJoinColumns = @JoinColumn(name = "address_id")
)
Set<Address> addresses;
}
@Entity
public class Address {
@Id
Integer id;
@Column(name = "street")
String street;
}
特殊之处在于它Person指的是Address,而Address不是Person指。
编译 JPQL 查询时会出现复杂性。我需要找到一个人拥有的地址以及街道与某个字符串匹配的位置。这样的 JPQL 查询会抛出错误:
@Query("SELECT a FROM Address a
WHERE a.street=:street
AND a IN (SELECT p.addresses FROM Person p WHERE p.id=:personId)")
Set<Address> getAllByStreetAndPersonId(String street, int personId);
从日志来看,这是因为这段代码: 被a IN (SELECT p.addresses解释为:a.id IN (SELECT .。
如何正确提出请求?
在这种情况下,以下查询将起作用: