【问题标题】:Mapping two columns to same column in a lookup table using hibernate hbm file使用休眠 hbm 文件将两列映射到查找表中的同一列
【发布时间】: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"

标签: java hibernate orm hbm


【解决方案1】:

我已经根据我们公司使用的工作 hbm 文件改编了这个文件,所以我知道它可以工作。它包括用于映射的列名。也许这就是你所缺少的?

<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>the 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>the permanent city of the employee</comment>
  </column>
</many-to-one>

祝你好运。

【讨论】:

  • 在 org.lookups.City 类型上读取 presentcity 时出错。 presentcity 和permanentcity 是employee 表中PRESENT CITY ID 和PERM CITY ID 的POJO 变量。虽然 id 是我保存在员工表中的 City 表的主键。请看看我的问题,我可能在你发布答案后编辑过。谢谢。
  • 好的,我更新了我的回复以使用您的列名。您是否尝试在您的 hbm 文件中使用它?
  • 我用过。它给出“在 org.lookups.City 类型上读取当前城市时出错”
  • 奇怪。你能把你完整的hbm文件吗?包括用于您所在城市的 hbm 文件?
  • 我已将两个 hbm 文件放在应用程序中使用的位置。
猜你喜欢
  • 1970-01-01
  • 2013-03-27
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 2023-03-14
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
相关资源
最近更新 更多