问题描述
以下是我的映射文件代码:<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的属性去关联更新的。
解决方案二:
都进session了啊 你要提交session.save(第一个对象)就不会关联了