这里只是简单的写两个方式。
一个是使用Criteria
一个是使用HQL Query
一:Criteria (下面的代码用不上事务的处理,代码片段中的事务只是一个为了保证事务的完整性而使用的一个标准格式化的代码片段。为了保持风格的统一,对于查询片段也使用了事务处理格式。虽然Spring本身提供了事务管理,但是对于简单事务来讲,直接处理的效率比较高,可读性与可控性也强一些。)
getHibernateTemplate().execute(
new HibernateCallback<Object>() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Object ret = null;
Transaction tx = session.beginTransaction();
try {
Criteria crit = session.createCriteria(Diary.class);
// 这行将对occasion进行唯一性合并
crit.setProjection(Projections.distinct(Projections.property("occasion")));
crit.createAlias("mission", "mission", Criteria.LEFT_JOIN);
crit.addOrder(Order.asc("occasion"));
ret = crit.list();
tx.commit();
} catch (Exception e) {
if (null != tx) {
tx.rollback();
}
e.printStackTrace();
if (e instanceof HibernateException)
throw (HibernateException) e;
if (e instanceof SQLException)
throw (SQLException) e;
}
return ret;
};
});
二:HQL Query(关于事务的管理同上。)
getHibernateTemplate().execute(new HibernateCallback<Recommendation>() {
@Override
public Recommendation doInHibernate(Session session)
throws HibernateException, SQLException {
Object ret = null;
Transaction tx = session.beginTransaction();
try {
// 当查询的结果集中只存在Recommendation对象时,distinct将结果集中的相同
// 对象合并成一个,如果left join fetch导致结果集中Recommendation对象与多个其它对象
// 造成查询结果的记录行不相同,则distinct无法对Recommendation对象合并。
String hql = "select distinct r from Recommendation r ";
hql += " left join fetch r.carries c left join fetch c.diary d ";
hql += " left join fetch r.prospectuses ps left join fetch ps.prospectus p ";
hql += " left join fetch p.policyTerms pt left join fetch pt.cover ";
hql += " where r.status=3503 or r.status=3504 ";
Query q = session.createQuery(hql);
Object lst = q.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP).list();
tx.commit();
} catch (Exception e) {
if (null != tx) {
tx.rollback();
}
e.printStackTrace();
if (e instanceof HibernateException)
throw (HibernateException) e;
if (e instanceof SQLException)
throw (SQLException) e;
}
return lst;
}
});
分享到:
相关推荐
使用Distinct查询.rar使用Distinct查询.rar
EFCore查询不重复数据Distinct,根据两个字段排序
主要介绍了MySQL DISTINCT 的基本实现原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
MySQL通常使用GROUPBY(本质上是排序动作)完成DISTINCT操作,如果DISTINCT操作和ORDERBY操作组合使用,通常会用到临时表.这样会影响性能. 在一些情况下,MySQL可以使用索引优化DISTINCT操作,但需要活学活用.本文涉及一个...
用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同),而如果要指定一个字段却没有效果,另外distinct关键字会排序,效率很低 。 select distinct name from t1 能消除重复记录,但只能取一个字段,...
有这样的一个需求:select count(distinct nick) from user_access_xx_xx; 这条sql用于统计用户访问的uv,由于单表的数据量在10G以上,即使在user_access_xx_xx上加上nick的索引, 通过查看执行计划,也为全索引扫描...
完美解决distinct中使用多个字段的方法,完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法完美解决distinct中使用多个字段的方法
用Distinct在MySQL中查询多条不重复记录值,绝对的物有所值
oracle rownum和distinct
mysql中distinct用法【SQL中distinct的用法】.docx
distinct的使用.docx
主要介绍了MongoDB教程之聚合,MongoDB除了基本的查询功能之外,还提供了强大的聚合功能,这里主要介绍count、distinct和group,需要的朋友可以参考下
【DISTINCT】优化之MySQL官方文档翻译
熟练掌握 openGauss 单表查询的语法结构及其使用方法 ... 掌握使用 DISTINCT 实现查询结果的去重方法 掌握空值 NULL 的使用方法 掌握表别名的使用场合及方法 掌握自身连接的使用方法
如果我想知道颜值有哪些取值,所以希望从结果集中去掉重复的记录,加上distinct关键字,位置在select和字段列表之间。distinct是从结果集中筛选出唯
wpf 文本框实现模糊匹配 主要是用了Popup 以及keyup事件博客说明地址https://blog.csdn.net/qq_42359838/article/details/106568785
hibernate HQL详细教程,简单易学易懂 1.1 HQL基础 2 1.1.1 默认数据库表和数据 2 1.1.2 检索类的所有对象 4 1.1.3 检索类的某几个属性 5 1.1.4 指定别名 5 1.1.5 where条件子句 5 1.1.6 使用distinct过滤掉重复值 6...
用C#实现对DataTable的JOIN,GROUP BY,FILTER,UNIONALL,DISTINCT