hibernate 本地SQL查询问题

wangjc868 2008-04-25 04:13:01
String sql="select {s.*},{e.*} from stu_base s inner join education e on s.sno=e.sno ";

SQLQuery sqlQuery=session.createSQLQuery(sql);
sqlQuery.addEntity("s", StuBaseInfo.class);
sqlQuery.addEntity("e", Education.class);
sqlQuery.list();
采用的是一对一外键关联查询
StuBaseInfo类Mapping
<hibernate-mapping package="com.stu.vo">
<class name="StuBaseInfo" table="stu_base" lazy="true"
batch-size="4">
<id name="sno" type="java.lang.String">
<column name="sno"></column>
<generator class="assigned"></generator>
</id>
<property name="sname" type="java.lang.String" length="10">
<column name="sname"></column>
</property>
<property name="sex" type="java.lang.String" length="10">
<column name="sex"></column>
</property>
<property name="nation" type="java.lang.String" length="10">
<column name="nation"></column>
</property>
<property name="birthday" type="java.lang.String" length="10">
<column name="birthday"></column>
</property>
<property name="birthplace" type="java.lang.String" length="20">
<column name="birthplace"></column>
</property>
<property name="publical" type="java.lang.String" length="10">
<column name="publical"></column>
</property>
<property name="cardID" type="java.lang.String" length="20">
<column name="cardID"></column>
</property>
<property name="health" type="java.lang.String" length="10">
<column name="health"></column>
</property>
<property name="marry" type="java.lang.String" length="10">
<column name="marry"></column>
</property>
<property name="favour" type="java.lang.String" length="100">
<column name="favour"></column>
</property>
<set name="practices" inverse="true" cascade="all" lazy="true">
<key column="sno" />
<one-to-many class="Practice" />
</set>
<one-to-one name="edu" class="Education" cascade="all" />

</class>
</hibernate-mapping>
-----------------------------------------------------------------
Education 类Mapping
<hibernate-mapping package="com.stu.vo">
<class name="Education" table="education" lazy="true">
<id name="sno" type="java.lang.String">
<column name="sno"></column>
<generator class="foreign">
<param name="property">stu</param>
</generator>
</id>
<property name="gra_school" type="java.lang.String" length="30">
<column name="gra_school"></column></property>
<property name="gra_time" type="java.lang.String" length="10">
<column name="gra_time"></column></property>
<property name="dept" type="java.lang.String" length="30">
<column name="dept"></column></property>
<property name="speciality" type="java.lang.String" length="30">
<column name="speciality"></column></property>
<property name="banji" type="java.lang.String" length="10">
<column name="banji"></column></property>
<property name="entrytime" type="java.lang.String" length="10">
<column name="entrytime"></column></property>
<property name="exittime" type="java.lang.String" length="10">
<column name="exittime"></column></property>
<property name="certificate" type="java.lang.String" length="10">
<column name="certificate"></column></property>
<property name="computer" type="java.lang.String" length="10">
<column name="computer"></column></property>
<property name="z_language" type="java.lang.String" length="10">
<column name="z_language"></column></property>
<property name="z_level" type="java.lang.String" length="10">
<column name="z_level"></column></property>
<property name="f_language" type="java.lang.String" length="10">
<column name="f_language"></column></property>
<property name="f_level" type="java.lang.String" length="10">
<column name="f_level"></column></property>
<one-to-one name="stu" class="StuBaseInfo" constrained="true"></one-to-one>
</class>
</hibernate-mapping>
运行抛出[Microsoft][ODBC SQL Server Driver]无效的描述符索引 异常。
但是sql="select s.* from stu_base s left join education e on s.sno=e.sno ";执行时没问题
就是一起查询s.*,e.*就会出错。请问是什么原因?

...全文
297 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Joe_n 2011-09-08
  • 打赏
  • 举报
回复
// Query query = this.getSession().getNamedQuery("detilQuery");
// query.setLong(0, id);
// List result = query.list();
// Iterator it = result.iterator();
// while (it.hasNext()) {
// Object[] results = (Object[]) it.next();
// Bid bid = (Bid) results[0];
// tender = (Tender) results[1];
// }
各位帮忙看看 ,怎么接收数组
lifeiping 2008-05-01
  • 打赏
  • 举报
回复
可以使用{}符号吗???
select s.*,e.* from stu_base s inner join education e on s.sno=e.sno
wangjc868 2008-04-30
  • 打赏
  • 举报
回复
哎,可是我照你的代码执行时还是出现[Microsoft][ODBC SQL Server Driver]无效的描述符索引异常,不知道原因在哪里,郁闷呐!
ximizhi 2008-04-30
  • 打赏
  • 举报
回复
嗯 hibernate 里面经常会有这种问题!
kyo100900 2008-04-28
  • 打赏
  • 举报
回复
String sql="select * from stu_base s inner join education e on s.sno=e.sno where s.sno=04261001";
SQLQuery sqlQuery=session.createSQLQuery(sql);
sqlQuery.addEntity("s", StuBaseInfo.class);
sqlQuery.addEntity("e", Education.class);
List list=sqlQuery.list();
StuBaseInfo s=(StuBaseInfo)list.get(0)
Education e=(Education)list.get(1);

改成

String sql="select {e.*}, {s.*} from stu_base s inner join education e on s.sno=e.sno where s.sno=04261001";
SQLQuery sqlQuery=session.createSQLQuery(sql);
sqlQuery.addEntity("s", StuBaseInfo.class);
sqlQuery.addEntity("e", Education.class);
List list=sqlQuery.list();
  Object[] obj = (Object[])list.get(0);
StuBaseInfo s=(StuBaseInfo)obj[0];
Education e=(Education)obj[1];

我完全按你的要求运行成功了。
panxuan 2008-04-26
  • 打赏
  • 举报
回复
关注。
caibaoying 2008-04-26
  • 打赏
  • 举报
回复
sql="select * from stu_base s inner join education e on s.sno=e.sno ";
Shine_Panda 2008-04-26
  • 打赏
  • 举报
回复
会不会是 另一个表(Education) 中没有数据啊!
wangjc868 2008-04-25
  • 打赏
  • 举报
回复
sql改成sql="select * from stu_base s inner join education e on s.sno=e.sno ";
并且只加sqlQuery.addEntity("s", StuBaseInfo.class); 可以执行
但是加
sqlQuery.addEntity("s", StuBaseInfo.class);
sqlQuery.addEntity("e", Education.class);
就不能执行 抛出Caused by: java.sql.SQLException: No data found异常
我的代码是
String sql="select * from stu_base s inner join education e on s.sno=e.sno where s.sno=04261001";
SQLQuery sqlQuery=session.createSQLQuery(sql);
sqlQuery.addEntity("s", StuBaseInfo.class);
sqlQuery.addEntity("e", Education.class);
List list=sqlQuery.list();
StuBaseInfo s=(StuBaseInfo)list.get(0)
Education e=(Education)list.get(1);
请大家帮我看看有什么错误。

yami251139 2008-04-25
  • 打赏
  • 举报
回复
是的。。。
你要在hbm.xml里面把 s 和 e 也都印社下才行。。。
这就是hibernate不灵活的地方了。。。
select 的东西 xml里面都要有。。。
gengxiecheng 2008-04-25
  • 打赏
  • 举报
回复
Shine_Panda 2008-04-25
  • 打赏
  • 举报
回复
sql="select {s.*},{e.*} from stu_base s inner join education e on s.sno=e.sno ";
直接用
sql="select * from stu_base s inner join education e on s.sno=e.sno ";

就可以了啊.
phyeas 2008-04-25
  • 打赏
  • 举报
回复
Microsoft的Jdbc驱动程序在不按照顺序读取的情况下会发生这个异常.建议楼主换个驱动确定一下是不是驱动问题.

67,537

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧