【问题标题】:How to query for all entries a WHERE "b MEMBER OF a.list"如何查询所有条目 a WHERE "b MEMBER OF a.list"
【发布时间】:2018-05-26 15:10:29
【问题描述】:

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

这是A:

@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<>();
}

这是乙:

@Entity
@Table(name = "b")
public class B implements Serializable{

    private static final long serialVersionUID = 1L;

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

    @NotNull
    @Column(name = "name", nullable = false)
    private String name;

    @Column(name = "description")
    private String description;
}

现在,我想要实现的是能够查询 A 的所有条目 a,在 a.bs 中有 B 的实体 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);
}

它不应该像这样工作吗?

但是我得到的错误是下面的错误,由于超出了帖子的大小限制,我把它放在了 pastebin 上:

Log

【问题讨论】:

  • 你有什么问题?
  • @MạnhQuyếtNguyễn 我将日志添加到帖子中
  • 您是否发布了您的真实查询,只为您的实体提供别名 A 和 B?
  • 是的,当然。

标签: java hibernate jpa jpql memberof


【解决方案1】:

我认为你在这里不需要join

试试这个查询:

@Query("SELECT DISTINCT a FROM A a WHERE :b MEMBER OF a.bs")

您正在使用 MEMBER OF 运算符,但将其与另一个表匹配,而不是与集合本身匹配,因此会导致 sql 语法错误。

默认PostgreSQL创建一个public架构,如果你没有为你的实体指定架构,当休眠检查公共架构时将找不到它。

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

【讨论】:

  • 需要加入,否则列表字段将无效
  • 你试过我的查询了吗?
  • 无法编译
  • 对不起,改成MEMBER OF a.bs
  • 和日志一样的东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 2011-02-03
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
相关资源
最近更新 更多