@OneToMany @ManyToOne 的多方 和 一方的删除方法

@Entity
public class Cell {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	long id;
	
	private String name;
	
	//小区创建时,自动创建一个地址
	@ManyToOne(cascade= {CascadeType.PERSIST})
	private Address address;
}
@Entity
public class Address {	
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	long id;
	
	private String name;	
	
	private String province;
	private String city;
	private String district;
	private String street;
	
	@OneToMany(cascade= {CascadeType.PERSIST},fetch=FetchType.EAGER,mappedBy="address")
	private Set<Cell> cells;
}
public void addCellToAddressTest()
	{
		Address address = addressDao.findByName("深圳老地方");
		if(address == null)
		{
			address = new Address();
		}
		
		address.setName("深圳老地方");
		if(address.getCells() == null)
		{
			Cell cell1 = new Cell();
			cell1.setName("新永丰1期");
			cell1.setAddress(address);
			
			
			Cell cell2 = new Cell();
			cell2.setName("新永丰2期");
			cell2.setAddress(address);
			
			address.addCell(cell1);
			address.addCell(cell2);
			
			addressDao.save(address);
		}

				
	}
	
	@Test
	public void 测试OneToMany单独删除多的一方()
	{
		addCellToAddressTest();
		Address address = addressDao.findByName("深圳老地方");
//删除一方的正确方法:
		if(address != null)
		{
			Set<Cell> cells = address.getCells();
			for(Cell c : cells)
			{
				c.setAddress(null);
				cellDao.save(c);
			}
			addressDao.delete(address);
		}
		
		
		//可以删除:
//		Cell cell1 = cellDao.findByName("新永丰1期");
//		if(cell1 != null)
//		{
//			address= cell1.getAddress();
//			if(address!=null)
//			{
//				address.removeCell(cell1);
//				cell1.setAddress(null);
//				cellDao.save(cell1);
//				addressDao.save(address);
//			}			
//			cellDao.delete(cell1);
//		}
		
		Cell cell1 = cellDao.findByName("新永丰1期");
		if(cell1 != null)
		{
			address= cell1.getAddress();
			if(address!=null)
			{
				cell1.setAddress(null);
				//cellDao.save(cell1);	//必须先保存 cell1,然后再去删除才能成功			
			}			
			cellDao.delete(cell1); //删除不成功,只能把指向的外键删除
		}

	}
	

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值