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