如何在Hibernate中将结果作为List <object>获取

时间:2015-11-16 12:45:10

标签: hibernate

我是hibernate的新手。

我定义了这两个类:

   public class User{
       String email;
       Company company;
   }; 

   public class Company{
      long id;
      String name;
   }

我希望获得与特定公司ID相对应的所有用户。

createSQLQuery返回一个简单的列表:

session.createSQLQuery("SELECT * FROM user WHERE company_id="+id).list();

如何使用hibernate条件或HQL获取List<User>

3 个答案:

答案 0 :(得分:2)

HQL :(更好,就像sql)

Query q = getSession().createQuery("select u from User u inner join u.company c where c.id = :id");
q.setParameter("id", id);
List<User> list = q.list();

HQL:

Query q = getSession().createQuery("select u from User u where u.company.id = :id");
q.setParameter("id", id);
List<User> list = q.list();

标准:

List<User> list = getSession().createCriteria(User.class).createCriteria("company").add(Restrictions.eq("id", id)).list();

答案 1 :(得分:0)

这应该在HQL中执行:

List users = session.createQuery("FROM User WHERE company.id = " + id).list();

结果列表只是返回值 您已在代码段中调用的list()方法。

不幸的是,它不是类型安全的。我建议Querydsl和/或Spring Data JPA执行类型安全查询。它们建立在JPA之上。

另一个提示:始终使用准备好的陈述。

答案 2 :(得分:0)

首先试试这个:

session.createQuery("SELECT * FROM user WHERE company_id=" + companyName).List<User>();

如果您可以通过以下方式获得结果

我假设你有unitOfWork上下文,这些类是你的实体。现在像这样更新你的课程,然后你可以随心所欲地获得更多。

公共类用户

    {
        public String Email { get; set; }
        public Company company { get; set; }
    };

    public class Company
    {
        public long Id { get; set; }
        public String Name { get; set; }
        public IList<User> Users { get; set; }
    }
public IList<User> GetompanyUsers(int Id)
        {
            return unitOfWork.Session().QueryOver<Company>().Where(c => c.Id == Id).Select(c=>c.Users).List<User>();
        }