论坛首页 Java版 Hibernate

再请教Hibernate构建动态查询

浏览 4687 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-04-02
你可以试试and()这个方法,是对象的组合.
add只是约束的设置

以下是我对动态查询的相关整理,希望对你有一定帮助.刚好昨天才整理的.呵呵

Hibernate中DetachedCriteria对象详解
DetachedCriteria add(Criterion criterion)  添加约束,如:Restrictions.eq(String,Object) 则是对String字段判等Object
           
DetachedCriteria addOrder(Order order)  排序,如Order.asc("id") 则是按id升序排列
           
DetachedCriteria createAlias(String associationPath, String alias) 创建别名
           
DetachedCriteria createCriteria(String associationPath)
           
DetachedCriteria createCriteria(String associationPath, String alias)
           
static DetachedCriteria forClass(Class clazz)
           
static DetachedCriteria forClass(Class clazz, String alias)
           
static DetachedCriteria forEntityName(String entityName)
           
static DetachedCriteria forEntityName(String entityName, String alias)
           
String getAlias()
           
Criteria getExecutableCriteria(Session session)  Get an executable instance of Criteria, to actually run the query.
DetachedCriteria setFetchMode(String associationPath, FetchMode mode)  执行的模式如:METHOD.ANYWHERE
           
DetachedCriteria setProjection(Projection projection)
           
DetachedCriteria setResultTransformer(ResultTransformer resultTransformer)
           
String toString()


还有两个重点对象
Restrictions 约束对象,这就是判断.如Restrictions.idEq("2");判断主键和2的相等情况
static Criterion allEq(Map propertyNameValues)
          Apply an "equals" constraint to each property in the key set of a Map
判断这个map安全相关的情况
between(String propertyName, Object lo, Object hi)
          Apply a "between" constraint to the named property
判断propertyName>=lo <=hi
eq 是 =
ge 是 >=
gt 是 >
le 是 <=
lt 是 <
ne 是 <>
and 应该是两个Criteria的组合
Projection 发射对像,这个对象主要是支持一些函数,如count,agv等
   
0 请登录后投票
最后更新时间:2007-04-02
downpour 写道
Criteria这样的东西老实说,只能很表面的解决一些问题。

面向关系型数据库的SQL发展了那么多年,完全希望以一种面向对象的方式去模拟其实还是很困难的。所以对于查询,可以尽可能使用HQL或者直接使用SQL,这样更加直观。

就像楼主的问题,在关系型数据库中是一个非常简单的问题,但是到了对象层面,它却不一样了。所以经常想想,为什么需要orm,是不是所有的时候,我们都应该使用orm?orm在某些特定的场合是否真的给我们带来的方便?


我个人觉得已经离不开orm了,而传统的jdbc处理关系数据库是根本无法脱离的。orm的存在可以让我们以面向对象的形式操作数据库,比较爽。在我们那个AbstractDao就是继承HibernateDaoSupport,注入jdbcTemplate。
   
0 请登录后投票
最后更新时间:2007-04-02
createquery不好么
   
0 请登录后投票
最后更新时间:2007-04-04
bainiao 写道
createquery不好么


多谢leoyu老兄的整理,我也是这样搞的。呵呵。
createQuery不好动态组合操作伏呀
"where 1=1 and a.name"+op+value...
这样拼下去,会很繁琐的,所以还是
	public <T> Criteria createCriteria(Class<T> entityClass, Criterion... criterions) {
		Criteria criteria = getSession().createCriteria(entityClass);
		for (Criterion c : criterions) {
			criteria.add(c);
		}
		return criteria;
	}

比较简洁舒服些。。。
   
0 请登录后投票
最后更新时间:2007-04-06
criteria简单的查询以下还可以,但是稍微复杂一些还是hql来得好,我想绝大多数程序员理解sql还是容易的多,所以说hql简洁一些,可读性应该也更强
   
0 请登录后投票
论坛首页 Java版 Hibernate

跳转论坛:
JavaEye推荐