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