【发布时间】:2013-06-27 20:24:24
【问题描述】:
我正在使用 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
-
@MasudCSECUET 不会直接删除它而不提供任何错误消息信息吗?
-
使关联是双向的,您将在 Person 实体中将汽车和房屋的集合直接链接到汽车。也就是说,我认为这并不是在每种情况下都可以做的合理的事情。如果您删除了一个打了 3000 次电话并有 500 个朋友的人,您不想列出所有这些实体。
-
不要在模型对象中进行数据库调用。在您的操作中使用 dao/helper。
-
@JBNizet:我只是在错误消息中显示一些顶级实体,而不是全部内容。那么有什么方法可以检测到该实体的外部链接中的所有外部约束?
标签: java spring hibernate spring-mvc constraints