hibernate的hql一点小问题(在线等,急!!!)
发布网友
发布时间:2022-05-16 00:05
我来回答
共6个回答
热心网友
时间:2023-11-17 19:11
如果你tuser和address2个类没有在Hibernate配置文件中做映射,就要写成全限定名,即包名+类名。如:select new com.xxx.tuser(...) ...
你下面那种省略了select的写法,返回的List中的元素是Object数组,数组中第一个元素是address对象,第二个元素是tuser对象,不过需要你手动的进行类型转换,因此直接用标签解析肯定是报错的。你可以手动把它拆分成2个新的List对象后再传给页面。
用你第一种方法比较方便点,加上全限定名应该就不会报找不到类的错误了,还有就是要提供相应字段的构造方法哈!
-------------------------------------------
你把异常发出来看下吧。
用全限定名我试过了是可以找到的,你看你构造函数写了没有,光有无参构造是不行的哦,要跟你语句写的一样才行。
----------------------------------
异常说的是无法确定的属性。看样子是addre.user.tuserId这个地方出的问题。确定这个时候你address类中user已经实例化了。
如果这个时候无法实例化User,还有另外一种方法:
即在address类中用一个String字段来映射userId,在配置文件中,该字段的<property>需要写updateable=false,insertable=false。(因为该列已经映*一个User对象,所以必须加这2个)
这样,你就可以直接写where addre.tuserId=user.tuserId,而不需要通过User对象来访问。
热心网友
时间:2023-11-17 19:11
new是关键字啊,很容易出错的。
热心网友
时间:2023-11-17 19:12
select new tuser(ts.name) from address as ress,tuser ts where ress.ts.name=ts.name
from 后面那个address类名开头字母我记得应该是大写吧Address
至于那个循环标签你看看改成这样
<logic:iterate id="addre" collection="<%=lookall%>"
scope="request" type="你那个类包名+类名"
>
${addre.addressName}
</logic>试下
热心网友
时间:2023-11-17 19:12
给你说过了,刚那个帖子就是你的吧,你的错在于没有封装formbean。
你的HQL写的问题不小。你返回的是个啥么,你就用new?
奇怪了,你还没给formbean里边封装对象你咋能在页面上通过formbean取值?
热心网友
时间:2023-11-17 19:13
直接用creatSQLQurey(queryString)执行sql语句,HQL太容易出错了
热心网友
时间:2023-11-17 19:14
我是wzy415的马甲...居然回答修改的次数有*,迫不得已建个马甲来继续讨论~~~
---------------------------------------------------
之前我有怀疑是你tuser表的别名取得有点问题,因为我记得在Oracle中user是保留关键字...但是不知道你用的是否是Oracle或者其他数据库中也同样是保留关键字...你换一个别名试试.