【问题标题】:How to use Hibernate criteria aliasses in proiections?如何在投影中使用 Hibernate 标准别名?
【发布时间】:2015-09-16 12:48:17
【问题描述】:

我有以下代码:

Criteria c = getMySession()
            .createCriteria(Company.class, "company")
            .createAlias("company.employees", "employee")
            .add(Restrictions.eq("company.name", companyName))
            .add(Restrictions.eq("employee.workingHours", companyName))
            .setFirstResult(firstResult)
            .setMaxResults(maxResults)
            .setProjection(Property.forName("employee"))
            ;

公司有一个员工实体列表

如果我使用

.setProjection(Property.forName("employee.name"))

结果是员工姓名的字符串列表。

如果我使用

.setProjection(Property.forName("employee"))

我期待一份 Employee 实体的列表。 我得到的是一个错误,说“员工”不是公司的财产。如何检索 Employee 对象列表?

【问题讨论】:

    标签: hibernate alias projection


    【解决方案1】:

    如果您需要 Employee,则构建查询以最初返回 Employee。

            Criteria c = getMySession()
            .createCriteria(Employee.class, "employee")
            .createAlias("employee.company", "company")
            .add(Restrictions.eq("company.name", companyName))
            .add(Restrictions.eq("employee.workingHours", companyName))
            .setFirstResult(firstResult)
            .setMaxResults(maxResults)
            ;
    

    【讨论】:

    • 但我没有公司财产,因此employee.company 将无法工作
    • 你可以试试 .setResultTransformer(Transformers.aliasToBean(Employee.class))
    • :) 它也不起作用。 SELECT 中的投影字段是公司、表关系 company_employee 和员工的所有字段。 Transformer 无法工作,因为它会尝试将公司的字段设置为 Employee 类..
    猜你喜欢
    • 2013-07-21
    • 2013-08-14
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多