//以下bean省略set get
public class User{
int id;
Dept dept;
}public class Dept{
int id;
int code;
String name;
}//以上两个bean,早dao层我使用以下代码得到两个查询对象
Criteria criteria = getSession().createCriteria(getEntityClass());//User
Criteria criteria1=criteria.createCriteria("dept");//Dept//也可以使用以下代码得到and条件的数据
criteria.add(Restrictions.eq("id", "1"));
criteria1.add(Restrictions.eq("id", "2"));//但如果我希望使用or时应该怎么做呢,这两个条件可是不同对象里的
Restrictions.or(Restrictions.eq("id", "1"), Restrictions.eq("id", "2"));
public class User{
int id;
Dept dept;
}public class Dept{
int id;
int code;
String name;
}//以上两个bean,早dao层我使用以下代码得到两个查询对象
Criteria criteria = getSession().createCriteria(getEntityClass());//User
Criteria criteria1=criteria.createCriteria("dept");//Dept//也可以使用以下代码得到and条件的数据
criteria.add(Restrictions.eq("id", "1"));
criteria1.add(Restrictions.eq("id", "2"));//但如果我希望使用or时应该怎么做呢,这两个条件可是不同对象里的
Restrictions.or(Restrictions.eq("id", "1"), Restrictions.eq("id", "2"));
解决方案 »
- jxl能生成透视表吗?
- Cannot find bean: "item" in any scope
- 小弟找工作,大家帮帮忙!(同时也散点分,希望大家来支持一下!)
- 一个关于JSP读取目录下的文件列表的问题
- JSP、Servlet中的相对路径和绝对路径
- 对数据库中的数据进行缓存是一次性全部取出还是按需取出效率高呢?
- 怎样将Vector中的数据存入一个二维数组中
- 怎样获得RadioButton按钮状态是否选中~~~~~~~
- 在线等:用weblogic配jsp+javabean,web.xml需要写一些什么
- #################Servlet 的问题 ############
- 求指导随机排序问题
- 怎样在点击一个图片时让它发送请求
http://blog.csdn.net/licip/archive/2008/07/10/2636036.aspx
criteria.createAlias("depts", "dept");
criteria.createAlias("users", "user"); System.out.println("user id = "+userSession.getId());
criteria.add(
Restrictions.disjunction()
.add(
Restrictions.conjunction()
.add(Restrictions.eq("inheritance", 0))
.add(Restrictions.eq("dept.id", userSession.getDeptId()))
)
.add(
Restrictions.eq("user.id", userSession.getId())
)
);
你user和dept有没有做关联。如果两个别名的问题不能解决。就尝试做关联。
如 user 多对一 dept.user对象中包含一个dept对象。
criteria 如下,如果只是查询id的话可以不用别名。但是如果要查询到 user.dept.deptName。就必须要做别名了。Criteria criteria = getSession().createCriteria(getEntityClass())
.add(Restrictions.eq("user.id", 1))
.add(Restrictions.eq("user.dept.id", 2));
这样应该能查询到user id=1 并且 user对应的dept id =2 的user对象。我只是假定你的问题可以转化为user到dept多对一的关联。我想你既然两张表连表查询不可能之间没有关系吧。如果你user dept是一对多 或者 多对多。也就是user中包含dept集合 Set<dept> depts,这个时候必须创建别名。Criteria criteria = getSession().createCriteria(getEntityClass())
criteria.createAlias("user.depts.id", "user.depts.id")
.add(Restrictions.eq("user.id", 1))
.add(Restrictions.eq("user.depts.id", 2));很久没用了 你试试看,有问题再研究。
表: link
中有set 属性depts及users
Criteria criteria = getSession().createCriteria(getEntityClass());
criteria.createAlias("depts", "dept");
criteria.createAlias("users", "user");
criteria.add(Restrictions.eq("dept.id", userSession.getDeptId()));这是最基本的,本应由数据,但是出不来,一旦注释users别名那一行就可以出来
.criteria.createAlias("users.id", "users.id")
.criteria.createAlias("depts.id", "depts.id")
.add(Restrictions.eq("users.id", 1))
.add(Restrictions.eq("depts.id", 2));
我的criteria也没学得很烂。你试试这种不用替换的形式看看。至于你给users定义了别名,但却没有查询条件,会不会有问题呢???
Criteria criteria = getSession().createCriteria(getEntityClass());不就代表了User了吗,你再写criteria.createAlias("users", "user"); 就表示User包含User了。
select this_.*
from linktree_link this_
inner join linktreelink_dept depts4_ on this_.id=depts4_.linktreelink_id
inner join system_depts dept1_ on depts4_.dept_id=dept1_.id
inner join linktreelink_user users6_ on this_.id=users6_.linktreelink_id
inner join system_users user2_ on users6_.user_id=user2_.id
where dept1_.id=2以上是简化后的语句,如果使用left join就可以出正确的结果。
因为我是希望以主表
linktree_link
数据为准。可现在的结果让人郁闷了、
那么我看了一下,createAlias还有一个从构的方法,第三个参数就是指定连接类型了,
呵呵!
criteria.createAlias("depts", "dept",CriteriaSpecification.LEFT_JOIN);
criteria.createAlias("users", "user",CriteriaSpecification.LEFT_JOIN);这样就可以了。谢谢各位关心,问题解决,各位提供了非常宝贵的意见!
当其中任意一表没有符合条件的数据时,则不会返回数据
而左连接以左边的表数据为基础,当没有限定条件时返回左表数据例:
表:link
id
1
2
3表:dept
id link_id
1 1表: user
id link_id
1 2
业务表business (businessId)
公司对应业务表 company2business (companyId,businessId) 想要通过业务条件来查询到客户的信息,不知道怎么查了。。
如:查询业务表中 所有经营电器的公司 的所有员工信息。如何通过hibernate 的criteria来进行查询呢??