hibernate 级联更新时 为什么只能更新一个表

3 篇文章 0 订阅

hibernate 级联更新时 为什么只能更新一个表,而另外一个表是直接插入了数据。。并没有更新。谁知道是为什么

 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.accp.entity.VoteOption" table="VOTE_OPTION">
        <id name="id" type="java.lang.Short">
            <column name="VO_ID"/>
           <generator class="sequence">
             <param name="sequence">vote_seq</param>
            </generator>
        </id>
        <property name="option" type="java.lang.String">
            <column name="VO_OPTION" length="10" not-null="true"/>
        </property>
       <many-to-one name="subject" class="com.accp.entity.VoteSubject" lazy="false" cascade="all">
         <column name="VS_ID"></column>
       </many-to-one>
    </class>
</hibernate-mapping>

 

 

 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.accp.entity.VoteSubject" table="VOTE_SUBJECT">
        <id name="id" type="java.lang.Integer">
            <column name="ID"/>
            <generator class="sequence">
             <param name="sequence">vote_seq</param>
            </generator>
        </id>
        <property name="title" type="java.lang.String">
            <column name="VS_TITLE" length="10" not-null="true"/>
        </property>
        <property name="type" type="java.lang.Short">
            <column name="VS_TYPE" length="10" not-null="true"/>
        </property>
       
        <set name="option" table="VOTE_OPTION" cascade="all" inverse="true" lazy="false">
         <key>
          <column name="VS_ID"></column>
         </key>
         <one-to-many class="com.accp.entity.VoteOption"/>
        </set>
    </class>
</hibernate-mapping>

 

 

我这两个表是配置的双向关联 。。一对多  和 多对一 关联。也设置了级联 。

 

Hibernate: insert into VOTE_OPTION (VO_OPTION, VS_ID, VO_ID) values (?, ?, ?)
Hibernate: insert into VOTE_OPTION (VO_OPTION, VS_ID, VO_ID) values (?, ?, ?)
Hibernate: insert into VOTE_OPTION (VO_OPTION, VS_ID, VO_ID) values (?, ?, ?)
Hibernate: insert into VOTE_OPTION (VO_OPTION, VS_ID, VO_ID) values (?, ?, ?)
Hibernate: insert into VOTE_OPTION (VO_OPTION, VS_ID, VO_ID) values (?, ?, ?)
Hibernate: insert into VOTE_OPTION (VO_OPTION, VS_ID, VO_ID) values (?, ?, ?)
Hibernate: insert into VOTE_OPTION (VO_OPTION, VS_ID, VO_ID) values (?, ?, ?)
Hibernate: insert into VOTE_OPTION (VO_OPTION, VS_ID, VO_ID) values (?, ?, ?)
Hibernate: insert into VOTE_OPTION (VO_OPTION, VS_ID, VO_ID) values (?, ?, ?)
Hibernate: insert into VOTE_OPTION (VO_OPTION, VS_ID, VO_ID) values (?, ?, ?)
Hibernate: insert into VOTE_OPTION (VO_OPTION, VS_ID, VO_ID) values (?, ?, ?)
Hibernate: insert into VOTE_OPTION (VO_OPTION, VS_ID, VO_ID) values (?, ?, ?)
Hibernate: insert into VOTE_OPTION (VO_OPTION, VS_ID, VO_ID) values (?, ?, ?)
Hibernate: insert into VOTE_OPTION (VO_OPTION, VS_ID, VO_ID) values (?, ?, ?)
Hibernate: insert into VOTE_OPTION (VO_OPTION, VS_ID, VO_ID) values (?, ?, ?)
Hibernate: insert into VOTE_OPTION (VO_OPTION, VS_ID, VO_ID) values (?, ?, ?)
Hibernate: insert into VOTE_OPTION (VO_OPTION, VS_ID, VO_ID) values (?, ?, ?)
Hibernate: update VOTE_SUBJECT set VS_TITLE=?, VS_TYPE=? where ID=?

 

控制台 只 输出了一条 update语句

 public String updateVoteSubject(){  //更新投票内容
  int id =  Integer.parseInt(ServletActionContext.
    getRequest().getParameter("SubjectId"));
  VoteSubject subject = new VoteSubject();
  subject.setId(id);
  subject.setTitle(this.subject.getTitle());
  subject.setType(new Short(this.subject.getType()));
   for(int i = 0; i<options.length; i++){
    VoteOption option = new VoteOption();
    option.setOption(options[i]);
    option.setSubject(subject);
    subject.getOption().add(option);
   }
  
   new VoteSubjectDaoImpl().voteUpdate(subject);
  return "update";
 }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设a和ac是通过某个字段关联的,比如a中有一个字段a_id,ac中也有一个字段a_id,示ac中的记录与a中的记录是相关联的。那么可以通过以下步骤实现级联更新: 1. 在a中创建一个触发器,当a中的某个字段发生更改,查询ac中与之相关的记录并更新它们。触发器可以使用以下代码实现: ``` CREATE TRIGGER update_ac ON a AFTER UPDATE AS BEGIN UPDATE ac SET ac_field1 = inserted.a_field1, ac_field2 = inserted.a_field2, ... FROM ac INNER JOIN inserted ON inserted.a_id = ac.a_id END ``` 其中,update_ac是触发器的名称,a_field1、a_field2等是a中需要更新的字段,ac_field1、ac_field2等是ac中需要更新的字段,可以根据实际情况进行修改。 2. 在ac中创建一个触发器,当ac中的某个字段发生更改,查询a中与之相关的记录并更新它们。触发器可以使用以下代码实现: ``` CREATE TRIGGER update_a ON ac AFTER UPDATE AS BEGIN UPDATE a SET a_field1 = inserted.ac_field1, a_field2 = inserted.ac_field2, ... FROM a INNER JOIN inserted ON inserted.a_id = a.a_id END ``` 其中,update_a是触发器的名称,a_field1、a_field2等是a中需要更新的字段,ac_field1、ac_field2等是ac中需要更新的字段,可以根据实际情况进行修改。 需要注意的是,以上代码仅供参考,具体的实现方式可能因为结构和数据关系的不同而有所不同,需要根据具体情况进行编写。同级联更新可能导致性能问题,需要进行测试和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值