【发布时间】:2015-09-11 13:59:59
【问题描述】:
我正在开发一个使用 jsf 1.2、richfaces 3.3 保存员工数据的应用程序,对于 ORM,我使用的是休眠 3。我正在“员工”基本表中保存关于两个字段的数据,即当前城市和永久城市。 City 值来自查找表 'City' 。我的员工表的 hbm 文件具有以下代码:-
<many-to-one name="presentcity" cascade="lock" column="PRESENT_CITY_ID"
class="org.lookups.City" lazy="false">
</many-to-one>
<many-to-one name="permanentcity" cascade="lock" column="PERM_CITY_ID"
class="org.lookups.City" lazy="false">
</many-to-one>
this 问题没有帮助,因为它使用注释,我需要使用 hbm 文件。问题是,当我更新当前城市或永久城市之一时,两个值都会更改。
我的表格结构如下:-
employee table
________________________________________________________
emp_id name age PRESENT_CITY_ID PERM_CITY_ID
________________________________________________________
203 paul 28 3 7
. . . . .
301 ferris 29 6 9
_________________________________________________________
city lookup table
______________________
id city
______________________
3 Chicago
. .
6 Cairo
. .
9 Wales
______________________
员工和城市的hibernate.cfg.hbm文件如下:-
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="org.Employee" table="EMP_MAIN">
<id name="empId" type="long" column="EMP_ID">
<generator class="increment"></generator>
</id>
<property name="emp_No" type="long" column="EMP_NO" />
<property name="name" type="string" column="NAME" />
<many-to-one name="presentcity" class="org.lookups.City"
fetch="select" cascade="none">
<column name="PRESENT_CITY_ID" precision="22" scale="0"
not-null="false">
<comment>present city of the employee</comment>
</column>
</many-to-one>
<many-to-one name="permanentcity" class="org.lookups.City"
fetch="select" cascade="none">
<column name="PERM_CITY_ID" precision="22" scale="0"
not-null="false">
<comment>permanent city of the employee</comment>
</column>
</many-to-one>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="org.lookups.City" table="LU_CITY">
<id name="id" type="long" column="CITY_ID">
<generator class="increment"></generator>
</id>
<property name="city" type="string" column="CITY_NAME" />
</class>
</hibernate-mapping>
如何解决这个问题。
【问题讨论】:
-
当您说“更新一个”时,您是指更新城市对象还是指向它们的对象?因为如果现在和永久都指向同一个对象,然后您更新该对象,它们都会改变。级联值也不应该是“无”吗?
-
我在指向查找“城市”表的“员工”表中进行了更改。
-
如果将级联值更改为“none”会怎样?
-
问题仍然存在于 cascade="none"