简单多对一的关系,使用HibernateSynchronizer生成的hbm加载正确但使用出错,延迟加载相关

applebomb 2006-11-18 11:55:18
还是上次那个 用户<->项目的关系,改成简单单向多对一

=======================User=======================

DDL:
CREATE TABLE `user` (
`USER_ID` int(11) NOT NULL,
`USER_NM` varchar(10) default NULL,
PRIMARY KEY (`USER_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk

HBM:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping package="com.mypack">
<class
name="User"
table="user"
>
<meta attribute="sync-DAO">false</meta>
<id
name="id"
type="integer"
column="USER_ID"
>
<generator class="identity"/>
</id>
<property
name="userNm"
column="USER_NM"
type="string"
not-null="false"
length="10"
/>
<set name="prjs" inverse="true">
<key column="USER_ID"/>
<one-to-many class="Prj"/>
</set>
</class>
</hibernate-mapping>

============================ Prj ===========================
DDL:
CREATE TABLE `prj` (
`PRJ_ID` int(11) NOT NULL,
`USER_ID` int(11) default NULL,
`PRJ_NM` varchar(10) default NULL,
PRIMARY KEY (`PRJ_ID`),
KEY `FK_prj` (`USER_ID`),
CONSTRAINT `prj_ibfk_1` FOREIGN KEY (`USER_ID`) REFERENCES `user` (`USER_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk

HBM:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping package="com.mypack">
<class
name="Prj"
table="prj"
>
<meta attribute="sync-DAO">false</meta>
<id
name="id"
type="integer"
column="PRJ_ID"
>
<generator class="identity"/>
</id>

<property
name="prjNm"
column="PRJ_NM"
type="string"
not-null="false"
length="10"
/>
<many-to-one
name="user"
column="USER_ID"
class="User"
not-null="false"
>
</many-to-one>


</class>
</hibernate-mapping>

======================错误信息======================

Hibernate: select prj0_.PRJ_ID as PRJ1_22_0_, prj0_.PRJ_NM as PRJ2_22_0_, prj0_.USER_ID as USER3_22_0_ from prj prj0_ where prj0_.PRJ_ID=?
ERROR - StandardWrapperValve.invoke(253) | Servlet.service() for servlet action threw exception
java.lang.ExceptionInInitializerError
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
(……省略……)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)
Caused by: net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:237)
at net.sf.cglib.reflect.FastClass$Generator.create(FastClass.java:64)
at net.sf.cglib.proxy.MethodProxy.helper(MethodProxy.java:81)
at net.sf.cglib.proxy.MethodProxy.create(MethodProxy.java:46)
at com.aherp.voice.model.steno.User$$EnhancerByCGLIB$$c612f2b2.CGLIB$STATICHOOK4(<generated>)
at com.aherp.voice.model.steno.User$$EnhancerByCGLIB$$c612f2b2.<clinit>(<generated>)
... 71 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.GeneratedMethodAccessor44.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:384)
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:219)
... 76 more
Caused by: java.lang.LinkageError: duplicate class definition: $java/lang/Object$$FastClassByCGLIB$$3f697993
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
... 81 more

=============================================================
PrjDAO prjDAO = (PrjDAO)getBean("prjDAO");
Prj prj = prjDAO.findById(1); //在此处出错
System.out.println("........step1......."); //<--此句未执行
System.out.println("............" + prj.getUser().getUserNm());
System.out.println("........step2......."); //<--此句未执行
return mapping.findForward("success");

启动没有错误,执行查询时错
最莫名其妙的错就是怎么最后的Cause By 是:duplicate class definition?

有SQL输出,证明第一个查询已经查询了,但是拿对象出现错误,应该与延迟加载有关。实际证明如果设置many-to-one的lazy=false就正常,但是我想使用延迟加载,有没有好的解决办法?
...全文
334 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcmis 2006-11-19
  • 打赏
  • 举报
回复
那恭喜了。。。。
applebomb 2006-11-19
  • 打赏
  • 举报
回复
终于明白怎么回事了,跟hibernate版本有关
applebomb 2006-11-18
  • 打赏
  • 举报
回复
upup,顶到有人知道为止。
Hibernate的延迟加载在many-to-one不能用么?
凉凉二点凉 2006-11-18
  • 打赏
  • 举报
回复
你用的是eclipse吗/我也用的HibernateSynchronize这个插件啊,可是我生成hbm文件时怎么没有
<id
name="id"
type="integer"
column="PRJ_ID"
>
<generator class="identity"/>
</id>

这个东西啊!
而且还报错!怎么回事啊,楼主

67,513

社区成员

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

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