当前位置: 首页 > 知识库问答 >
问题:

对非主键列使用Hibernate条件进行内部联接

齐文栋
2023-03-14

我想使用Hibernate条件语言编写此查询。我对Hibernate很陌生,无法将此查询转换为条件形式。我参考了很多关于 SO 的答案,但就我而言,我在不同的列上使用内部连接而不是主键/外键列。我提到了这个,但仍然不能正确。

select TableA.columnA1, TableA.columnA2, TableA.columnA3, TableB.columnB1, TableC.columnC2 from TableA inner join  TableB 
on 
cast(TableA.columnA3 as Integer) = TableB.columnB2
inner join
TableC
on 
TableB.columnB3 = TableC.columnC1

共有1个答案

陆信瑞
2023-03-14

为了处理连接逻辑,您需要对每个表使用<code>from</code>,并在<code>where</code>谓词中包含on子句中的所有条件。

下面是一个JPA示例,它在没有外键关系的情况下处理父子关系:

EntityManager em = getDb().getEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Child> criteria = cb.createQuery(Child.class);
Root<Parent> p = criteria.from(Parent.class);
Root<Child> c = criteria.from(Child.class);
Predicate condition = cb.and(
    cb.equal(c.get(Child_.parentId), p.get(Parent_.id)),
    ...
    );
criteria.where(condition);
criteria.select(c);
criteria.orderBy(cb.asc(c.get(Child_.createDate)));
TypedQuery<Child> q = em.createQuery(criteria).setMaxResults(limit);

此处提供了一个JPA示例,因为不建议使用HiberNate标准API,而是使用JPA标准API(请参阅传统HiberNate标准查询)。

 类似资料:
  • 问题内容: 我使用主键联接列(employee_id)映射了员工和员工详细信息类(双向) 有人可以说明执行以下查询会话时的原因吗。createQuery(“ from Employee”)。list(); A)执行类似2),3)和4)的联接查询以从employeedetail中获取数据?为什么不使用雇员对象中的employeeid值直接从employeedetail表中获取数据而不进行联接? B)

  • SQL Server 2000 使用20多个视图,所有视图都与table1(id和value1以及value2)进行内部连接 表1 或 表2 从表1中,value1或value2应始终为null。现在的问题是,如果value1或value2列为null,则输出显示为null,因为所有视图都是id为value1、value2的内部联接 我想使用条件进行内部联接,如果value1不为null,则使用v

  • 我有两张这样结构的桌子。 表: 1) Obj表- 2) subobj表 我的场景是我有is_deleted列,在delete上我不想删除记录,而是想将is_deleted设置为true并更新所需的依赖项 详细场景: 1)考虑,用户正在从具有Id1.nowsubobj表中删除与obj_id1关联的行的obj表中删除一行,应该将is_deleted设置为true。 2) 子对象表包含自引用fk“父对象

  • 问题内容: 我试图在一个列上内部联接两个表。从数据库方面来看,没有映射,因为这是我不想讨论的。 我想使用INNER JOIN执行HQL查询并检索ROLE对象/结果。 到目前为止,这是我的总部 session.createQuery(“ ROLE作为角色,INNER JOIN INVOLVEMENT作为参与角色,id。X =参与.roleid WHERE参与.id = X”)。list(); 我看到

  • 问题内容: 我想要一种改进我的sql代码的好方法,当条件满足时,我必须使用内部联接。我目前正在复制代码: 我想以这种方式做到这一点: 编辑: 解决方案(由于@Damien_The_Unbeliever): 问题答案: 这应该(大约)执行相同的操作: 当然,这还意味着必须编写对其中的列的任何其他引用,以期望此类列为。

  • 我的Hibernate bean ContentElementTypeProperty引用了另一个Hibernate bean TestUnitType(多对一)。 TestUnitType是ContentElementTypeProperty的字段。 在数据库中,testunittypeid是表ContentElementTypeProperty中的一列。 我正在寻求从contentelemen