我有 2 个 Java 类,一个称为 Definition
,另一个称为 Classification
。
一个定义有一个分类列表,所以 0..n
基数。
这是我的对象关系映射的样子:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.myPackage.Definition" table="definition">
<id name="id" column="ID" type="java.lang.Long">
<generator class="increment" />
</id>
<!-- definition will have many to many asscoiations with Classes -->
<set name="classes" table="class_definition" cascade="save-update">
<key column="definition_id" />
<many-to-many column="class_id" class="com.myPackage.Classification" foreign-key="fk_class_definition" />
</set>
</class>
</hibernate-mapping>
我现在要做的是删除定义和分类之间的关系。例如定义 X 有分类 A、B 和 C,我想删除分类 C 的链接。
我知道如何在 HQL 中编写删除查询来删除类的对象。但是我不知道如何删除我的类的属性值。
谁能给个建议?
最佳答案
从上面的问题中,我发现解决方案的数据建模存在问题。 按照上面的设计,一个定义对象可以包含多个分类对象。并且,由于两个实体之间存在多对多关系,因此单个分类对象可能关联到多个定义对象。
从上面的问题中,我意识到分类对象不会是一个事务实体,而是或多或少是一个记录系统,这意味着在所有映射之后对其进行的任何更改都会发生。话虽如此,根据问题,尝试更新 Classification 类的属性以取消关联映射可能会有问题!相反,我建议使用以下数据模型。
当前型号:
建议模型:
根据提议的模型,您不需要更新记录系统分类对象的任何属性。相反,您的工作将更多地是关于删除和创建新的 ClassificationMapper 对象。分类的示例类如下所示:
class ClassificationMapper{
Long definitionId; // Primary key for Definition
Long classificationId; // Primary key for Classification
}
ClassificationMapper类与Definition类是多对一的组合关系,与Classification类是多对一的关联关系。
关于java - 使用 HQL 删除对象之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28608880/