论坛首页 Java企业应用论坛

父子关系及inverse 详解

浏览 58434 次
该帖已经被评为精华帖
作者 正文
   发表时间:2004-08-14  
什么赃数据问题?请言明
0 请登录后投票
   发表时间:2004-08-14  
查询子表的时候,与子表纪录相对应得父表纪录已经被删除了,其实这是子表的纪录就属于脏数据的,可是因为业务需求,却不能够把这条记录删除的,这时候查询就会抛
出exception而不是返回一个null的父亲,这个问题我就
把它叫做脏数据问题的
0 请登录后投票
   发表时间:2004-08-15  
willmac 写道
查询子表的时候,与子表纪录相对应得父表纪录已经被删除了,其实这是子表的纪录就属于脏数据的,可是因为业务需求,却不能够把这条记录删除的,这时候查询就会抛
出exception而不是返回一个null的父亲,这个问题我就
把它叫做脏数据问题的


真的看不懂,不是我不想讨论。

如果父子设置了级联删除关系,当你查询子表的时候,就根本查不到记录了。怎么会抛异常?如果你不设置级联删除,子表记录根本就没有被删除,又怎么会抛异常?
0 请登录后投票
   发表时间:2004-08-15  
哇,子表纪录没有删除,但父表纪录已经被删除了
难道你们不会爆这个错误的?
net.sf.hibernate.UnresolvableObjectException: No row with the given identifier exists: 12, of class: jxufe.xfz.vo.Student
看来真的是有哪个地方,使我是我所没有注意的了
0 请登录后投票
   发表时间:2004-09-02  
very good!
原来看还不明白,在自己不断的实践之后,豁然明白许多!
0 请登录后投票
   发表时间:2004-09-09  
非常感谢,对我真是场及时雨啊
0 请登录后投票
   发表时间:2004-09-24  
inverse与cascade是两个不同的概念,但它们之间却有着微妙的关系。厘清这种联系的内部原因,对于关联的理解会更深。在《Hibernate in action》的3.7:Introducing associations 对这些内容进行了最本源的讲解。
结论是正确的,但思考同一个问题的角度不同,产生的效果自然不同。
0 请登录后投票
   发表时间:2004-09-27  
willmac 写道
查询子表的时候,与子表纪录相对应得父表纪录已经被删除了,其实这是子表的纪录就属于脏数据的,可是因为业务需求,却不能够把这条记录删除的,这时候查询就会抛
出exception而不是返回一个null的父亲,这个问题我就
把它叫做脏数据问题的


如果两表存在父子关系, 最好在子表上建立个FK指向父表. 要不然,就会出现象你说的这种情况: 父表的数据删除了, 但它的ID还存在子表中.

而且, 不这样做的话, 基本上就是一个错误的设计.
0 请登录后投票
   发表时间:2005-04-25  
好文章,好久之前就看过。因为没记住 就又来看了一遍,还是觉得很不错。
0 请登录后投票
   发表时间:2005-05-02  
但是怎么从父方删除子方呢?



这段代码,是希望在保存用户信息时能更新它的子表--角色表

但,这段代码可以保存新的角色不能删除去除的角色。

也就是说,保存后的结果是原角色集合与新角色集合的并集。
而不是要求的结果--只保存新角色的集合。

Set authorities = new CopyOnWriteArraySet();; 
for (int i=0; i<model.getRoles();.length; i++); { 
AuthoritiesId authoritiesId = new AuthoritiesId();; 
authoritiesId.setUserDetails(userDetails);; 
authoritiesId.setRoleDefiniens(roleDefiniensDao.loadByPrimaryKey(model.getRoles();[i]););; 
Authorities authority = new Authorities(authoritiesId);; 


authorities.add(authority);; 
} 
userDetails.setSetOfAuthorities(authorities);; 

session.saveOrUpdate(userDetails);; 





映射文件:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping 
DTD 2.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> 
<hibernate-mapping> 
<!-- 
    Auto-generated mapping file from 
    the hibernate.org cfg2hbm engine 
--> 
  <class name="demos.UserDetails" 
  table="KYDA_USER_DETAILS"> 
    <id name="relId" type="java.lang.Integer"> 
      <column name="REL_ID" not-null="true" unique="true" 
      sql-type="INTEGER" /> 

      <generator class="native"> 
          <param name="sequence">kyda_user_details_rel_id</param> 
      </generator> 
    </id> 

    <property name="username" type="java.lang.String"> 
      <column name="USERNAME" length="50" not-null="true" 
      unique="true" sql-type="VARCHAR" /> 
    </property> 

    <property name="realname" type="java.lang.String"> 
      <column name="REALNAME" length="50" not-null="true" 
      sql-type="VARCHAR" /> 
    </property> 

    <property name="password" type="java.lang.String"> 
      <column name="PASSWORD" length="50" not-null="true" 
      sql-type="VARCHAR" /> 
    </property> 

    <property name="accountNonExpired" type="java.lang.Boolean"> 
      <column name="ACCOUNT_NON_EXPIRED" not-null="true" 
      sql-type="BOOLEAN" /> 
    </property> 

    <property name="credentialsNonExpired" type="java.lang.Boolean"> 
      <column name="CREDENTIALS_NON_EXPIRED" not-null="true" 
      sql-type="BOOLEAN" /> 
    </property> 

    <property name="accountNonLocked" type="java.lang.Boolean"> 
      <column name="ACCOUNT_NON_LOCKED" not-null="true" 
      sql-type="BOOLEAN" /> 
    </property> 

    <property name="enabled" type="java.lang.Boolean"> 
      <column name="ENABLED" not-null="true" sql-type="BOOLEAN" /> 
    </property> 
<!-- 
    <property name="authorities" type="java.lang.String"> 
      <column name="AUTHORITIES" length="1024" not-null="true" 
      sql-type="VARCHAR" /> 
    </property> 
--> 

      <set name="setOfUserGroupRelation" inverse="true" cascade="all"> 
      <key> 
        <column name="USER_REL_ID" not-null="false" 
        unique="true" /> 
      </key> 

      <one-to-many 
      class="demos.UserGroupRelation"  /> 
    </set> 

    <set name="setOfAuthorities" inverse="true" cascade="all"> 
      <key> 
        <column name="REL_ID" not-null="false" unique="true" /> 
      </key> 

      <one-to-many 
      class="demos.Authorities" /> 
    </set> 
  </class> 
</hibernate-mapping>
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics