前景提要
hibernate 多表连接查询 只能读出一个表的数据 另两个表的列得不到值
0 悬赏园豆: 50 [待解决问题] 现在有三个表,用户表(uno,uname),图书表(bno,bname),评论表(brno,uno,bno,review),现在要从数据库中读出用户表的用户名,图书表的书名和评论表的评论内容
这是hql语句部分
Session session=HibernateSessionFactory.getSessionFactory().getCurrentSession();
tc = session.beginTransaction();
hql=" select br.brno,br.bno,br.uno,u.uname,br.brtime,br.review,b.bname" +
" from BookReview br," +
"Book b ,Uuser u where u.uno=br.uno and br.bno=b.bno";
Query query = session.createSQLQuery(hql).addEntity(BookReview.class);
bookreview = (List<BookReview>)query.list();
tc.commit();
这个select语句在SQL Server里可以执行
但是程序里,最后显示结果的时候只有bookreview(评论表)里的列有值,用户名和书名都没有值(应该是有这两个列存在,因为用for循环显示时,可以输出.getUname(),但是没有值)
我有在bookreview的类里创建对应参数的构造函数
public BookReview(int brno,String bno,int uno, String uname,Timestamp brtime,
String review,String bname) {
super(brno, bno, uno,uname,brtime, review,bname);
}
也配置了.hbm.xml
<many-to-one name="book" class="com.Literary.chen.hibernate.Book" fetch="select">
<column name="bno" not-null="true" />
</many-to-one>
<many-to-one name="uuser" class="com.Literary.chen.hibernate.Uuser" fetch="select">
<column name="uno" not-null="true" />
</many-to-one>
现在想请教一下是哪里的问题,拜谢 hibernate 多表查询 暖心系 | 初学一级 | 园豆: 104
提问于:2019-05-25 14:41 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题
所有回答(1) 0 因为你的用户名和书名是u.uname和b.bname取的,而不是br.uname,br.bname取的 流年飞雨 | 园豆:1978 (小虾三级) | 2019-05-26 14:37 因为br表没有这两列啊,我在br的实体类里有定义对应参数的构造函数,但是如果直接写br.uname的话会报错,列名无效 支持( 0 ) 反对( 0 ) 暖心系 | 园豆:104 (初学一级) | 2019-05-26 15:08 @暖心系: 可以试下这篇文章的方法: hibernate 实现多表连接查询(转载) 支持( 0 ) 反对( 0 ) 流年飞雨 | 园豆:1978 (小虾三级) | 2019-05-26 15:12 @流年飞雨: 我就是参考这篇文章写的, 所以写了构造函数,映射类和直接sql语句都不行,都是只有一个表的值,新建一个映射类的话会直接报找不到类对应的表,难道还要再建一个表吗 支持( 0 ) 反对( 0 ) 暖心系 | 园豆:104 (初学一级) | 2019-05-26 15:17 @暖心系: 你写的语句和文章中的也不一样啊,你定义了构造函数,但你sql中没用啊,人家文章中的sql中可是用了构造函数的 支持( 0 ) 反对( 0 ) 流年飞雨 | 园豆:1978 (小虾三级) | 2019-05-26 15:19 @流年飞雨: 其实不增加映射类也是可以的,只需要在Users.java实体类里增加一个构造函数,函数参数还是需要的所有字段,并为这些参数中Users实体原来没有的字段添加属性和getter() setter()即可。
他是这么说的,所以我再BookReview.java 的实体类中加了一个构造函数,参数是我需要的那些,添加了getter setter,新的构造函数与原构造函数同名 也叫BookReview ,那我是不是应该也写"select new BookReview(br.brno,br.bno,br.uno,u.uname,br.brtime,br.review,b.bname)这样?我其实不是很懂 支持( 0 ) 反对( 0 ) 暖心系 | 园豆:104 (初学一级) | 2019-05-26 15:25 编辑文本 预览 上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。