莫感 2010-11-09 11:19
浏览 252
已采纳

关于many-to-one中cascade不起作用的问题

以下是我的映射文件代码:


<hibernate-mapping>
<class name="demo1.many_to_one.mediaadv.MediaAdv" table="media_adv" catalog="report" >
<id name="advid" type="java.lang.String">
<column name="advid" length="20" />
<generator class="assigned" />
</id>
<property name="adate" type="java.util.Date">
<column name="adate" length="19" />
</property>
<property name="no" type="java.lang.String">
<column name="no" length="6" />
</property>
<property name="advname" type="java.lang.String">
<column name="advname" length="200" />
</property>
<property name="remark" type="java.lang.String">
<column name="remark" length="1000" />
</property>
<many-to-one name="media" class="demo1.many_to_one.media.Media" column="mediaid" update="false" cascade="none" >
</many-to-one>
</class>
</hibernate-mapping>


以下是java代码:

Session session = HibernateSessionFactory.getSession();
session.beginTransaction();
MediaAdvDAO dao = new MediaAdvDAO();
MediaAdv ma = dao.findById("advtest");
Media me = ma.getMedia();
ma.setAdvname("aftertest1");
me.setMedianame("Ais sms");
//按我的理解,因为cascade="none",所以me对象不应该被更新到数据库里面,但事实上他却被更新到数据里面了
System.out.println((ma.getMedia()).getMedianame());
session.flush();
session.getTransaction().commit();
HibernateSessionFactory.closeSession();




请各位帮我看一下.
问题补充
hqyhch 写道

MediaAdv ma = dao.findById("advtest");

Media me = ma.getMedia();


me是通过ma获得的,获得之后me也是一个entity,当事务提交的时候,是将ma和me当着两个entity去提交更新的,并不是通过cascade的属性去关联更新的。



这样子有点明白..
cascade 的具体作用是什么..可大概说一下吗

问题补充
按你的提示
找到解决办法了
将many-to-one的lazy设置为false

然后java代码改为:

Session session = HibernateSessionFactory.getSession();
session.beginTransaction();
MediaAdvDAO dao = new MediaAdvDAO();
MediaAdv ma = dao.findById("advtest");
session.getTransaction().commit();
HibernateSessionFactory.closeSession();
Media me = ma.getMedia();
ma.setAdvname("aftertest12");
me.setMedianame("Ais sms231");
System.out.println("ttttttttt");
Session session2 = HibernateSessionFactory.getSession();
session2.beginTransaction();
dao.attachDirty(ma);
session2.getTransaction().commit();

  • 写回答

2条回答 默认 最新

  • 华子82 2010-11-09 11:19
    关注

    [code="java"]
    MediaAdv ma = dao.findById("advtest");

    Media me = ma.getMedia();

    [/code]
    me是通过ma获得的,获得之后me也是一个entity,当事务提交的时候,是将ma和me当着两个entity去提交更新的,并不是通过cascade的属性去关联更新的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容