关于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();

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

Media me = ma.getMedia();

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

都进session了啊 你要提交session.save(第一个对象)就不会关联了