Hibernate manytomany级联

时间:2015-03-12 08:50:20

标签: java hibernate orm

我有两个实体,“项目”和“员工”,一个项目包含0,1或许多员工,员工可以参与0,1或许多项目。 所以它是一个正常的多对多关系,第三个表是必需的......我们称之为“ProjectEmployee”。

当我删除项目时,应删除项目本身以及ProjectEmployee中的正确条目/条目。但员工应该仍然存在。 员工也一样......所以应该可以在项目和员工中有很多条目,但在ProjectEmployee中不能只有一个条目。

我希望它清楚我想拥有的东西。

现在的问题是我不知道正确的映射(XML)应该是什么样子。

目前如下:

项目:                                             

    <set name="employees" table="ProjectEmployee" cascade="save-update">
        <key column="projectId" />
        <many-to-many class="Employee" column="employeeId" />
    </set>
    <set name="modules"  cascade="save-update,delete-orphan" fetch="select" lazy="true" inverse="true">
        <key column="projectId" />
        <one-to-many class="Modul" />
    </set>
</class>

员工

<class name="Employee">
    <id name="id" type="long">
        <generator class="sequence"></generator>
    </id>

    <property name="firstName" type="string">
        <column name="firstName" />
    </property>
    <property name="lastName" type="string">
        <column name="lastName" />
    </property>
    <property name="dateOfBirth" type="date">
        <column name="dateOfBirth" />
    </property>

    <set name="logbookEntries" inverse="true" cascade="save-update,delete-orphan"
        fetch="select" lazy="true">
        <key column="employeeId" />
        <one-to-many class="LogbookEntry" />
    </set>

    <set name="issues" inverse="true" cascade="save-update,delete-orphan"
        fetch="select" lazy="true">
        <key column="employeeId" />
        <one-to-many class="Issue" />
    </set>


    <one-to-one name="address" class="Address" cascade="save-update, delete" />

    <set name="projects" table="ProjectEmployee" inverse="true"
        cascade="save-update">
        <key column="employeeId" />
        <many-to-many class="Project" column="projectId"/>
    </set>
    <joined-subclass name="PermanentEmployee">
        <key column="id" />
        <property name="salary" />
    </joined-subclass>

    <joined-subclass name="TemporaryEmployee">
        <key column="id" />
        <property name="hourlyRate"></property>
        <property name="renter"></property>
        <property name="startDate"></property>
        <property name="endDate"></property>
    </joined-subclass>


</class>

目前,当我想删除一名员工时,我得到一个例外。 org.hibernate.exception.ConstraintViolationException

那是因为我没有配置“cascade:delete”!

我希望你能帮助我。

0 个答案:

没有答案