HIBERNATE多表查询DAO方法怎么写?

来自:    更新日期:早些时候
hibernate,求一支持多表查询的泛型DAO~

Ddsj_androidSessionFactory.getSession().createSQLQuery(sql语句).setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP).list();
加上setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)就可以返回泛型了

if(transfer.getX()!=null && !"".equal(transfer.getX()))
{
queryString+=" and x='"+transfer.getX()+"'";
}
System.out.println("queryString="+queryString);

刚好在写这个,举个例子给你参考参考:
现有Student类和Teacher类,Student和Teacher是多对一的关系,Student 类中会有一个Teacher的变量。现在通过Student来查询对应Teacher的Name属性:
部分代码:
String hql="from Student s where s.name= 'xmuchen'";
//hql语句搜索Student表
List list=studentDAO.findBy(hql);
//结果存到list中
if(list.size()>0)
Student student= (Student)list.get(0);
//不为空的话取list的第一值
teacherName=student.getTeacher.getTeacherName();
//通过student获得Teacher的Name属性。

我用的就是这种,其他更好的方法暂时就不知道了。

用hibernate的自动生成的的dao:
Java code
List results = getSession()
.createCriteria("com.anbo.lzy.TableTerm").add(
Example.create(instance)).list();
log.debug("find by example successful, result size: "
+ results.size());
return results;
} catch (RuntimeException re) {
log.error("find by example failed", re);
throw re;
}
}

把这个改为你对应的实体类:TableTerm instance 就是User
List results = getSession()
.createCriteria("com.anbo.lzy.TableTerm").add(
Example.create(instance)).list();

这就话改下,改为:
List result=getSession().createQuery("select user from User").list();
将result 保存到request中,跳转到页面 用EL表达式显示即可!

在HQL上写好即可

例如有AB两个bean,A中有一属性为b(B);那么多表查询的hql即为

FROM A AS a JOIN a.b ....

即可!


HIBERNATE多表查询DAO方法怎么写?视频

相关评论:
  • 15959918467什么叫n+1次select查询问题?
    花天聂Hibernate将先查询CUSTOMERS表中所有的记录,然后根据每条记录的ID,到ORDERS表中查询有参照关系的记录,Hibernate将依次执行以下select语句:select * from CUSTOMERS;�

  • 15959918467Struts2有什么优缺点 hibernate有什么优缺点? spring呢?
    花天聂二、Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和App Server没有任何关系,也不存在兼容性问题。三、Hibernate不能用来直接和Entity Bean做对比,只有放在整个J2EE项目的框架中才能比较。并且即使是放在软件整体框架中来看,Hibernate也是做为JDBC...

  • 15959918467hibernate大数据性能处理
    花天聂将严重影响Hibernate的CRUD性能! C = create R = read U = update D = delete Fetch Size 是设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数 例如一次查询 万条记录 对于Oracle的JDBC驱动来说 是不会 次性把 万条取出来的 而只会取出Fetch Size条数 当纪录集遍历完了这些记录以后 再去数据...

  • 15959918467MyBatis和Hibernate的区别是什么?
    花天聂\\x0d\\x0a Mybatis 也是对jdbc的封装,但是封装的没有hibernate那么深,我们可以再配置文件中写sql语句,可以根据需求定制sql语句,数据优化起来较hibernate容易很多。\\x0d\\x0a Mybatis要求程序员写sql的能力要相对使用hibernate的开发人员要高的多,且可移植性也不是很好。\\x0d\\x0a 涉及到大数据的...

  • 15959918467hibernate查询时查不出数据但是数据库中数据存在。具体问题见补充...
    花天聂如果 你使用的mysql 数据 ,看下mysql 数据库连接串中是否加上字符编码 如下:jdbc:mysql:\/\/localhost:3306\/zxb_trade?characterEncoding=utf-8

  • 15959918467spring一级缓存和二级缓存的区别是什么?
    花天聂\\x0d\\x0a二级缓存:\\x0d\\x0a就是SessionFactory级别的缓存。顾名思义,就是查询的时候会把查询结果缓存到二级缓存中。\\x0d\\x0a如果同一个sessionFactory创建的某个session执行了相同的操作,hibernate就会从二级缓存中拿结果,而不会再去连接数据库。\\x0d\\x0a这是可选的插件式的缓存,在默认...

  • 15959918467java里的VO是什么意思?
    花天聂一、PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象。使用Hibernate来生成PO是不错的选择。 \\x0d\\x0a\\x0d\\x0a 二、VO:value object值对象。通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据...

  • 15959918467在配置Hibernate二级缓存的时候,在ehcache.xml中 有这么一句 <diskStore...
    花天聂这里可以把maxElementsInMemory值设置到一个比较安 全的大小,自己预先测试一下最好。如果内存仍然存不下你需要存的对象个数,那么可以开启overflowToDisk来增加可以存储的Element个 数。这里要注意一下,EHCache不会自动帮助你去把内存对象写入到磁盘,当超过maxElementsInMemory程序会自动把更多的部分开始往 ...

  • 15959918467来个大神问下关于JAVA的SSH框架的一些问题
    花天聂及filter等。spring负责注入实体,和切面编程(事物)。hibernate负责dao的具体实现操作及映射实体。有部分CRUD是可以交给HQL的,像那种特复杂的可以直接createNativeSQL来执行。里面放入原始的SQL,我们称为原生SQL。其实hibernate在我的理解中最大的问题是效率问题。像表连接查询也可以通过HQL的。

  • 15959918467Hibernate中一级缓存的作用有哪些?
    花天聂\\x0d\\x0a当程序调用get(),load(),iterate(查询实体对象才支持一级缓存,查询普通属性则不支持一级缓存)时,Hibernate会先到缓存中\\x0d\\x0a去拿,如果缓存中已经存在目标对象,则直接拿来而不再查询数据库,否则,必须发出查询语句到数据库中查。\\x0d\\x0a 如果数据量特别大,我们一般考虑...

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网