如何在hibernate中编写此查询的条件,
select u.userID, ur.authority from users u, user_roles ur where u.userID = ur.userID and u.userName ="sandy"
我试过这种方式,但我得到一个空列表,
DetachedCriteria ownerCriteria = DetachedCriteria.forClass(users.class);
ownerCriteria.setProjection(Property.forName("userID"));
ownerCriteria.add(Restrictions.eq("userName", "sandy"));
Criteria criteria = session.createCriteria(user_roles.class);
criteria.add(Property.forName("userID").in(ownerCriteria));
System.out.println(criteria.list());
有人可以在这个问题上帮助我吗?
答案 0 :(得分:0)
我可以看到你的查询中有u.userID = ur.userID,这是不是意味着用户和user_roles之间存在一对多的关系?
如果答案是肯定的,你可以这样做:
Criteria criteria = session.createCriteria(user_roles.class,"ur")
.createCriteria("userDto","u")
.add(Restrictions.eq("userName", "sandy"));
然后像查询一样添加投影:
criteria.setProjection( Projections.projectionList()
.add(Projections.property("u.userID").as("userID"))
.add(Projections.property("ur.authority").as("authority")) );
你可以在结果列表中找到它:
for(Object[] item:criteria.list()){
System.out.println( (String)item[0] ); //User id
System.out.println( (String)item[1] ); //Authority
}
关于您的代码:
criteria.add(Property.forName("userID").in(ownerCriteria));
您正在将属性与子查询进行比较,因此它可能没有按照您的想法执行,但我的猜测可能不对。