Java琐事

-I am not alone
posts - 54, comments - 30, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

hibernate的单向级联删除问题

Posted on 2010-10-06 18:38 石子路口 阅读(2670) 评论(3)  编辑  收藏 所属分类: 网络教学资源平台
   对于两个不同的表,在hibernate中可以设置它们的多对多关系,一对一关系或者是多对一关系。而且还有单向和双向的问题。这些都是学hibernate必学的,这里不再重复。我只说下级联删除时应注意的问题,多对一单向关系到底能不能实现级联?
   假设存在两个表:栏目(lm)表,内容(mknr)表;它们属于多对一的关系,即栏目可以包括多个内容。则有以下方式:
 栏目表对应的pojo类:Lm.java
public class Lm implements java.io.Serializable
{
    
//栏目id
    private int id;
    
private String name;
    
private Set mknr = new HashSet();

    
//getter和setter方法

}
   栏目表对应的映射文件:Lm.hbm.xml
<?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"
>
<hibernate-mapping>
    
<class catalog="eteares" name="cn.edu.ujn.wsjx.model.Lm" table="lm">
        
<id name="id" type="java.lang.Integer">
            
<column name="id" />
            
<generator class="identity" />
        
</id>
        
<property name="name" type="java.lang.String">
            
<column length="20" name="name" />
        
<set name="mknr" inverse="false" cascade="all">
            
<key column="lmId" />
            
<one-to-many class="cn.edu.ujn.wsjx.model.Mknr"/>
        
</set>
    
</class>
</hibernate-mapping>
   内容表对应的pojo类:Mknr.java
public class Mknr implements java.io.Serializable
{
    
private int id;
    
private String title;
    
private String content;
    
private Lm lm;
    
    
//getter和setter方法

}
  内容表对应的映射文件:Mknr.hbm.xml
<?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"
>

<hibernate-mapping>
    
<class name="cn.edu.ujn.wsjx.model.Mknr" table="mknr" catalog="eteares">
        
<id name="id" type="java.lang.Integer">
            
<column name="id" />
            
<generator class="identity" />
        
</id>
        
<property name="title" type="java.lang.String">
            
<column name="title" length="100" />
        
</property>
        
<property name="content" type="java.lang.String">
            
<column name="content" length="16777215" />
        
</property>
        
<many-to-one name="lm" class="cn.edu.ujn.wsjx.model.Lm" lazy="false">
            
<column name="lmId" />
        
</many-to-one>
    
</class>
</hibernate-mapping>


                从上面的代码可以得知,这种设置方式属于一对多双向关联,为什么不设置成多对一单向关联呢(把Lm.java中的mknr属性去掉),之前我就是这么设置,但每当删除lm中的记录时,删除就会出现外键参考的错误,这是因为mknr中有记录外键到了lm表中,而删除时因为单向关联无法通过lm找到mknr
                所以要使用级联删除,就要设置成双向关联!

评论

# re: hibernate的单向级联删除问题  回复  更多评论   

2010-10-08 09:25 by 窝窝影视
学习了

# re: hibernate的单向级联删除问题  回复  更多评论   

2010-11-04 11:16 by jndxjing
我都百度到你这来了。。。哈哈

# re: hibernate的单向级联删除问题  回复  更多评论   

2010-11-04 17:11 by syg
@jndxjing
幸会……幸会

只有注册用户登录后才能发表评论。


网站导航: