java - 使用 HQL 删除对象之间的关系

标签 java hibernate hql

我有 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 类的属性以取消关联映射可能会有问题!相反,我建议使用以下数据模型。

当前型号: enter image description here

建议模型: enter image description here

根据提议的模型,您不需要更新记录系统分类对象的任何属性。相反,您的工作将更多地是关于删除和创建新的 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/

相关文章:

java - 当 JOIN FETCH 与主 ID 以外的引用列一起使用时,Hibernate 执行多个查询

hibernate - 意外 token : LIMIT error in hql

java - 具有多个表连接和 sum()、first() 的 HQL

java - 通过泰勒展开的高斯累积密度函数

java - playOrm - 调试/运行 - TestManyToOne.java @ Refresh/Clean

java - 如何以编程方式在 Java 中获取二进制数的 2 的补码

java - 为什么我的 android Activity 偶尔会崩溃并显示 "No adapter attached; skipping layout"?

java - 简单的 Hibernate 应用程序不工作 : PropertyAccessException: could not get a field value by reflection getter of

java - Hibernate MySQL 查找未映射的表和列

java - EJB环境下如何使用外部文件进行数据库配置