取消hibernate的双向维护,以及引用cascade="delete"

在现在的多个表关联的应用中,表与表的同时维护少不了。

下面是我在进行SSH应用中遇到的问题及一些解决方法。


表:

Client表(一)

Contact表(多)


在网页中,想通过维护或删除Client表中的对象时,同时将对应的Contact表中的关联对象进行维护或删除。下面将各个情况说一下。

1、进行修改维护

因为在Client表中进行修改它的名称时,也要将它反映到Contact表中。

但是在两个 cfg.xml参数表中没有设置的好话,就会出现Client表的名称修改了,但是在Contact表中的外键却变成了null的情况。


		
   
   
		
   
   
		
   
   
			
    
    	
    
    
			
    
    
		
   
   	
   
   
		
    
    
			
     
     
		
    
    	
		
    
    
		
    
    
		
    
    
		
    
    
		
    
    
		
    
    
		
    
    
		
    
    

   
   

Client表维护前

维护后

Client维护后


要在Client.cfg.xml中,set标签中加入inverse="true",加入后表示在client更新时,不对外键进行维护。只由contact表来维护。

这样就可以避免出现contact表出现外键变成null的情况了。


2、级联删除。

在代码里面,set集合中加入cascade="delete",表示在表Client中进行级联删除。这样只要在Client表中进行删除操作,与之关联的多个contact对象就会同时被删除。

		
   
   
		
   
   
		
   
   
			
    
    	
    
    
			
    
    
		
   
   	
   
   
		
    
    
			
     
     
		
    
    	
		
    
    
		
    
    
		
    
    
		
    
    
		
    
    
		
    
    
		
    
    
		
    
    

   
   


####注意的是,不要只加入inverse =“true”,这样的话只是对修改起作用,但是进行删除的时候,Contact表中的外键数据就会丢失而出错。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值