@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); //刪除不成功,只能把指向的外鍵刪除
		}

	}
	

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章