我有两个实体,“项目”和“员工”,一个项目包含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”!
我希望你能帮助我。