gpt4 book ai didi

java - Hibernate Criteria API 仅使用 id 连接到另一个表

转载 作者:行者123 更新时间:2023-12-01 19:58:08 24 4
gpt4 key购买 nike

我正在尝试使用 Hibernate Criteria API 从一个表连接到另一个表。问题是表 Contract 仅有 salesId 定义为 long(因此没有 FK)。然后我不知道如何将契约(Contract)与销售关联起来。最好在下面的例子中解释一下。

架构如下:

Table Contract:  
----------------------
ID | salesId |
----------------------
1 | 1 |
2 | 2 |
----------------------

Table Sales:
----------------------
ID | code |
----------------------
1 | SALES_1 |
2 | SALES_2 |
----------------------

在契约(Contract)实体中,我只有private Long salesId;

我需要实现的是这样的:

getSession().createCriteria(Contract.class)
.createAlias("salesId", "s") // somehow connect to Sales table
.add(Restrictions.eq("s.code", salesCode)); // salesCode is param

所以不能直接使用createAlias↓,因为 hibernate 未知

.createAlias("sales", "s")

我无法更改模型以在表之间创建 FK。有办法解决这个问题吗?我想避免 SQL 字符串连接。

编辑: 我使用 Hibernate Criteria API 的原因是其他查询参数(此处未显示)是可选的,因此它们不能成为 SQL 查询的一部分。这就是我无法使用 HQL 的原因。

最佳答案

这可能是您在 hibernate 5 中的解决方案:

Criteria criteria  = getSession().createCriteria(Contract.class);

Criterion subquery = Restrictions.sqlRestriction("{alias}.salesId = (select id from TABLE_SALES where code = ?)", salesCode, StandardBasicTypes.STRING);

criteria.add(subquery);

您想要将其用于动态查询,然后您可以根据您的业务逻辑在自定义限制上使用该条件。

criteria.add(Restrictions.and(subquery)) -- example
criteria.add(Restrictions.or(subquery)) -- example

PD: TABLE_SALES 必须是您在数据库中的销售表名称,您也可以预先附加其架构。

干杯。

关于java - Hibernate Criteria API 仅使用 id 连接到另一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48784585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com