hibernate的单向级联删除问题

   对于两个不同的表,在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
                所以要使用级联删除,就要设置成双向关联!

你可能感兴趣的:(hibernate的单向级联删除问题)