【问题标题】:Hibernate Criteria / Query on object propertiesHibernate Criteria / 查询对象属性
【发布时间】:2010-12-30 11:18:55
【问题描述】:

我有一堂课AppUser;

class AppUser {
   private String firstName;
   private String lastName;
   //-- getters and setters
}

我还有一门课Student;

class Student {
   private AppUser appUser;
   private Date dateOfBirth;
   //-- getters and setters
}

如何搜索 Student John Doe、名字 John、姓氏 Doe?

如果它是出生日期属性,我将创建一个 Criteria 并在该日期添加一个相等限制 (Restristions.eq)。我将如何处理 AppUser 对象中的 lastName 和 firstName?

【问题讨论】:

    标签: java hibernate criteria


    【解决方案1】:

    查询:

    Query q = session.createQuery(
        "SELECT s from Student s WHERE s.appUser.firstName=:firstName AND s.appUser.lastName=:lastName");
    q.setParameter("firstName", "John");
    q.setParameter("lastName", "Doe");
    

    如需使用标准,请查看this thread

    也可以看看this page from hibernate docs

    【讨论】:

    • 感谢您的回答,但是否可以在没有Query 的情况下实现此目的,而不是使用Criteria 和Restriction?
    • 我试过appUser.firstName,但我得到一个错误,未知属性
    • 我更新了我的答案,将其指向提出类似问题的休眠论坛。
    【解决方案2】:

    您可能需要添加一个别名...类似于:

    List students = session.createCriteria(Student.class).createAlias("appUser", "user").add(Restrictions.eq("user.firstName", firstName)).list();
    

    没有别名:

    List students = session.createCriteria(Student.class).add(Restrictions.eq("appUser.firstName", firstName)).list();
    

    【讨论】:

    • 第一个对我有用,我认为它更直接地回答了这个问题,因为它使用了 Criteria。
    猜你喜欢
    • 2012-01-29
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2011-01-28
    相关资源
    最近更新 更多