Java 如何查询所有条目a WHERE";b.a.list的成员“;

Java 如何查询所有条目a WHERE";b.a.list的成员“;,java,hibernate,jpa,jpql,memberof,Java,Hibernate,Jpa,Jpql,Memberof,我有一个实体,比如说A,它有一个字段,是另一个实体的列表,比如说B 这是一个: @Entity @Table(name = "a") public class A implements Serializable{ private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGen

我有一个实体,比如说A,它有一个字段,是另一个实体的列表,比如说B

这是一个:

@Entity
@Table(name = "a")
public class A implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
    @SequenceGenerator(name = "sequenceGenerator")
    private Long id;

    @ManyToMany
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    @JoinTable(name = "a_b",
               joinColumns = @JoinColumn(name="as_id", referencedColumnName="id"),
               inverseJoinColumns = @JoinColumn(name="bs_id", referencedColumnName="id"))
    private Set<B> bs = new HashSet<>();
}
现在,我试图实现的是能够查询a的所有条目a,在a.bs中有一个实体b

实际查询如下:

@Repository
public interface ARepository extends JpaRepository<A, Long> {
    @Query("SELECT DISTINCT a FROM A a LEFT JOIN FETCH a.bs bs WHERE :b MEMBER OF bs")
    List<A> findAllByB(@Param("b") B b);
}
@存储库

公共界面ARepository扩展了JpaRepository

我想你不需要在这里加入

请尝试以下查询:

@Query("SELECT DISTINCT a FROM A a WHERE :b MEMBER OF a.bs")
您正在使用
运算符的
成员,但将其与另一个表匹配,而不是与集合本身匹配,因此会导致sql语法错误

默认情况下,
PostgreSQL
创建一个
public
schema,如果您没有为您的实体指定schema,那么在hibernate检查public schema时将找不到它

@Table(name = "b", schema = "schemaname")

你有什么问题?@MạnhQuyế特恩盖伊ễn我已将日志添加到邮件中。您是否仅使用别名A和B发布实体的真实查询?是的,当然。如果需要加入,则列表字段将无效。您是否尝试了我的查询?它不会编译错误,请将其更改为A.bs的
成员
与日志相同的内容
@Table(name = "b", schema = "schemaname")