java - Hibernate Criteria 多表

标签 java sql hibernate join criteria

目前我正在使用 Hibernate Criteria API,我遇到了以下情况:

@Entity(name = "A")
private class A {
    @Id
    @GenericGenerator(name = "fileEntryIdGenerator", strategy = "increment")
    @GeneratedValue(generator = "fileEntryIdGenerator") 
    @Column(name = "DBID")
    private Long id;

    @Column
    private String name;
    @OneToMany(targetEntity = B.class, cascade = {CascadeType.ALL }, fetch = FetchType.LAZY)   @JoinColumn(name = "A_id")
    private Set<B> references;
    // ....
}

@Entity(name = "B") private class B{
@Id
@GenericGenerator(name = "fileEntryIdGenerator", strategy = "increment")
@GeneratedValue(generator = "fileEntryIdGenerator")
@Column(name = "DBID")
private Long id;   @Column   private String name;...}

现在,我的计划是获取所有 B 的列表,其中 A.name = 'testName'。 因此我需要标准声明。

有人可以帮帮我吗?!

最佳答案

我希望您正在尝试使用条件 API 连接两个表。请检查以下代码。

Criteria criteria = session.createCriteria(B.class, "B");
criteria.createAlias("B.A", "A", JoinType.INNER_JOIN);
criteria.add(Restrictions.eq("A.name", "name"));
criteria.list();

在上面的代码中,

第 1 行 - 为类 B 创建条件对象。

第二行 - B 根据映射列与 A 连接

第 3 行 - 基于 A 中的 Name 列进行限制。

第4行-执行Criteria获取列表

另外我认为A类可以映射到B类(多对一)。

关于java - Hibernate Criteria 多表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39914886/

相关文章:

java - 拦截对数据库的查询

java - 找出最便宜的商品

mysql - 这个自左连接返回的记录比我预期的要多

hibernate - 运行 JPQL 更新语句时 Hibernate 二级缓存是否失效

java - 如何通过ID检查数据是否已经存在

MYSQL设置临时列用于连接表

java - 如何为原始 JSON + JSON(B) PostgreSQL 实现 Hibnernate 类型

java - 如何让两个dockerized应用程序在给定端口上进行通信?

java - Spring hibernate : org. hibernate.exception.SQLGrammarException

java - 如何从日期变量中查找下一个和上一个日期