`

hibernate根据字段去除重复记录

阅读更多

public List<Employee> getUniqueNameByHqlCorrect(){
  List<Object[]> list=employeeDao.createQuery("from Employee e inner join (select max(b.id) as id  from  Employee b group by b.name) c on (c.id=e.id)", new Object[]{}).list();
  for(Object[] rows:list){  
            System.out.println(": " + rows[0] + "值: " + rows[1]);    
        } 
  return null;
 }

from Employee e inner join (select max(b.id) as id  from  Employee b group by b.name) c on (c.id=e.id)

这条hql会不会写错,为什么会报.异常

org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ( near line 1, column 57 [from com.dhhc.cs.oa.entity.system.Employee e inner join (select max(b.id) as id  from  com.dhhc.cs.oa.entity.system.Employee b group by b.name) c on c.id=e.id]
 at

 

 

 

以下两种方法可以实现根据字段去除重复记录

 

 

/**
  * hibernate sql根据某一字段的值不重复,用in的方法不健壮,效率低,当in里的id值大于1000个报错
  * @return
  */
 public List<Employee> getUniqueNameByHqlCommon(){
  List<Employee> list=employeeDao.createQuery("from Employee e where e.id in(select max(b.id) from  Employee b group by b.name)", new Object[]{}).list();
  for(Employee entity:list){  
   System.out.println(": " +entity.getName() );    
  } 
  return null;
 }

 

 

 

/**
  * 使用联接,相对于in的用法更合适
  * @return
  */
 public List<Employee> getUniqueNameBySqlCorrect(){
  Session session=this.getSessionFactory().openSession();
  String sql="select name,email from sys_employee e inner join (select max(b.id) as id from  sys_employee b group by b.name) c on (c.id=e.id)";
  List<Object[]> list=session.createSQLQuery(sql).list();
  for(Object[] rows:list){  
            System.out.println(": " + rows[0] + "值: " + rows[1]);    
        }
  session.close();
  return null;
 }

 

 

分享到:
评论

相关推荐

    java Struts2+hibernate+Spring整合的通讯录

    (1) 通信录实现浏览或查找通信录中记录,能够添加,删除,修改记录等。 (2) 用户处于只有登录之后才可以添加,删除,修改记录;如果没有登录只可以查看信息。 (3) 用户注册,需要通过Struts2字段校验判断用户注册...

    Java面试宝典2010版

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 17.介绍一下Hibernate的二级缓存 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message 属性, ...

    最新Java面试宝典pdf版

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    Java面试笔试资料大全

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    JAVA面试宝典2010

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    Java面试宝典-经典

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    java面试题大全(2012版)

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    Java面试宝典2012版

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message...

    java面试宝典2012

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 135 17.介绍一下Hibernate的二级缓存 135 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    Java面试宝典2012新版

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    Java 面试宝典

    一. Java 基础部分..................................................................................................................... 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?...

Global site tag (gtag.js) - Google Analytics