首页新闻找找看学习计划

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>

现在想请教一下是哪里的问题,拜谢

暖心系的主页 暖心系 | 初学一级 | 园豆:104
提问于:2019-05-25 14:41
< >
分享
所有回答(1)
0

因为你的用户名和书名是u.uname和b.bname取的,而不是br.uname,br.bname取的

流年飞雨 | 园豆:1923 (小虾三级) | 2019-05-26 14:37

因为br表没有这两列啊,我在br的实体类里有定义对应参数的构造函数,但是如果直接写br.uname的话会报错,列名无效

支持(0) 反对(0) 暖心系 | 园豆:104 (初学一级) | 2019-05-26 15:08

@暖心系: 可以试下这篇文章的方法:hibernate 实现多表连接查询(转载)

支持(0) 反对(0) 流年飞雨 | 园豆:1923 (小虾三级) | 2019-05-26 15:12

@流年飞雨: 我就是参考这篇文章写的, 所以写了构造函数,映射类和直接sql语句都不行,都是只有一个表的值,新建一个映射类的话会直接报找不到类对应的表,难道还要再建一个表吗

支持(0) 反对(0) 暖心系 | 园豆:104 (初学一级) | 2019-05-26 15:17

@暖心系: 你写的语句和文章中的也不一样啊,你定义了构造函数,但你sql中没用啊,人家文章中的sql中可是用了构造函数的

支持(0) 反对(0) 流年飞雨 | 园豆:1923 (小虾三级) | 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
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册