我正在使用Spring - Hibernate来控制我的应用程序中的模型。这些模型是相互关联的(一对多,多对多,几乎种类的关系),现在我在删除其他实体正在使用的实体时遇到问题。问题是我想显示详细消息,通知其他对象(类型,名称)正在使用我要删除的实体。 Hibernate引发我不是约束违规的常见信息。
例如:Car --> Person, House --> Person
;那么当我删除一个拥有汽车和房屋的人时,该消息将显示“有汽车(名为福特野马)和房子(名为MyHouse)与此人相关联”。
1.那么Hibernate是否有任何方法支持这个要求?我想这个特定的要求没有实现。
2.如果没有任何可用于解决此问题的实用程序,我在考虑以下解决方案:
- 在每个实体类(即Person)中,我将定义检测从此实体到其他实体的链接的所有检查方法,例如:休眠检查删除限制
class Person {
// Properties
// Checking methods, return type and name of linked objects
public Map<String, String> getLinkedCars() {
// Query to DB to get linked cars
// return a Map contain Class name along with object name <Car, Ford Mustang>
}
public Map<String, String> getLinkedHouses() {
// Query to DB to get linked houses
// return a Map contain Class name along with object name <House, MyHouse>
}
}
- 然后,在服务中删除Person实体之前,我会使用反射机制来从检查方法(其名字开始与“getLinkedXXX”)收集的结果,并建立详细的错误信息。
那么这个解决方案好吗?关于性能和MVC的约定(因为我必须在模型类中查询数据)?
谢谢你的帮助。
使用cascade = CascadeType.REMOVE – Masudul
@MasudCSECUET那不只是删除它没有给出一个错误消息的任何信息? –
使这些关联成为双向的,并且您将在Person实体中直接链接到汽车和房屋的集合。也就是说,我认为在任何情况下这都是不合理的。如果您删除了拨打3000个电话的人员和500个朋友,您不希望列出所有这些实体。 –