使用复杂的 sqlquery 时如何使用 Hibernate 创建组合对象的映射?
Posted
技术标签:
【中文标题】使用复杂的 sqlquery 时如何使用 Hibernate 创建组合对象的映射?【英文标题】:How to create mapping of composed object with Hibernate when using a complex sqlquery? 【发布时间】:2015-08-14 10:37:11 【问题描述】:我正在尝试将以下查询与 Hibernate 的 session.createSQLQuery 一起使用。 user对应的Entity对象有一个名为address的属性。 address 对象是由表 'user' 中的 5 个字段创建的。 如果我不使用 SQLQuery,它会自动填充。 但是,如果没有 SQLQuery,我将无法从下面显示的所需连接中获得所有信息。 用户实体对象还具有我正在使用
填充的 accessPlan 等属性.addEntity("accessPlan", AccessPlan.class)
查询:
SELECT
user.*,
ap.*,
country.*,
auth.*,
GROUP_CONCAT(coup.code SEPARATOR ' ') coupons
FROM
user
INNER JOIN access_plan ap ON (user.access_plan = ap.id)
INNER JOIN country ON (user.country=country.code)
LEFT JOIN user_auth auth ON (user.id = auth.userid)
LEFT JOIN (
SELECT
trans.user_id,coupon.code
FROM
payments_transaction AS trans
INNER JOIN payments_coupon coupon ON (trans.payments_coupon_id=coupon.id)
) coup ON (user.id=coup.user_id)
GROUP BY user.id;
在使用 SQLQuery 时,填充组合 address 对象的最简单方法是什么? 或 有没有办法避免使用 SQLQuery 进行这样的查询?
【问题讨论】:
顺便说一句,此查询的结果应该是 List请查看“Returning multiple entities”部分中的以下示例
String sql = "SELECT ID as c.id, NAME as c.name, " +
"BIRTHDATE as c.birthDate, MOTHER_ID as c.mother, mother.* " +
"FROM CAT_LOG c, CAT_LOG m WHERE c.mother = c.ID";
List loggedCats = sess.createSQLQuery(sql)
.addEntity("cat", Cat.class)
.addEntity("mother", Cat.class).list()
在你的例子中,cat = user,mother = address...有点像。
目前我没有什么可以尝试的,但我想这会有所帮助。
【讨论】:
以上是关于使用复杂的 sqlquery 时如何使用 Hibernate 创建组合对象的映射?的主要内容,如果未能解决你的问题,请参考以下文章
使用 context.Object.SqlQuery 时返回匿名类型
使用 `db.Database.SqlQuery<model>` 后如何清除参数
获取“SqlParameter 已被另一个 SqlParameterCollection 包含。”使用 SqlQuery 命令时出错