Java 如何查询所有条目a WHERE";b.a.list的成员“;
我有一个实体,比如说A,它有一个字段,是另一个实体的列表,比如说B 这是一个: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
@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")