我是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>
?
答案 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>();
}