Hibernate映射两个表中具有相同的类名一个HBM文件?(Hibernate Mapping t

2019-09-21 17:36发布

我有2个表:

CREATE TABLE "LOCATION"   (
    "ID"              NUMBER(19,0) NOT NULL ENABLE,
    "VERSION"         NUMBER(19,0) NOT NULL ENABLE,
    "DELETEULD"         NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE,
    "INBOUND"           NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE,
    "AAENABLED"         NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE,
    "WSUPLDTOOL"        NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE,
    "CISDEST"           VARCHAR2(7 CHAR),
    "REVRECOVERY"       NUMBER(1,0) DEFAULT 0,
    CONSTRAINT "LOCATION_ID" PRIMARY KEY ("ID")  ENABLE  )

CREATE TABLE "TSLD164"."FTP_SCAN_EVENTS"
  (
    "HOSTNAME"    VARCHAR2(200 BYTE),
    "DIRECTORY"   VARCHAR2(200 BYTE),
    "USERNAME"    VARCHAR2(20 BYTE),
    "PASSWORD"    VARCHAR2(20 BYTE),
    "LOCATION_ID" NUMBER(19,0) NOT NULL ENABLE,
    CONSTRAINT "FTP_SCAN_EVENTS_LOCATION_FK1" FOREIGN KEY ("LOCATION_ID") REFERENCES "LOCATION" ("ID") ENABLE
  )

与FK和PK(LOCATION_ID柱和Id)相关的表

我与上述所有的列字段的表格。 但是,从表中的列FTP_SCAN_EVENTS是隐藏的,并通过一个复选框选择(REVRECOVERY)它们的形式显示出来。 并且用户可以添加行动态如果他想。

<td><form:checkbox path="revRecovery" onclick="showMe('div1',this), showMe('i1',this)"/>
            <input type="hidden" value="1" name="_revRecovery"/>
            FTP Scan Events</td></tr><tr><td colspan="4">
                    <table id="div1" style="display:none">
            <tr><td><input type="text" value="hostname" onfocus="if(this.value == 'hostname'){this.value =''}" onblur="if(this.value == ''){this.value ='hostname'}" size="30" maxlength="200"/></td>
            <td><input type="text" value="directory" onfocus="if(this.value == 'directory'){this.value =''}" onblur="if(this.value == ''){this.value ='directory'}" size="30" maxlength="200"/></td>
            <td><input type="text" value="username" onfocus="if(this.value == 'username'){this.value =''}" onblur="if(this.value == ''){this.value ='username'}" size="20" maxlength="20"/></td>
            <td><input type="text" value="password" onfocus="if(this.value == 'password'){this.value =''}" onblur="if(this.value == ''){this.value ='password'}" size="20" maxlength="20"/></td></tr>
                    </table>
            </td></tr>
            <tr id="i1" style="display:none"><td><input type="button" onclick="addRow()" value="+"/>
            <input type="button" onclick="removeRowFromTable();" value="-" />
            </td></tr>

对于位置我HBM文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="ca.ups.tundra.model">
    <class name="Location" table="LOCATION">
        <id name="id" access="field" type="long">
            <generator class="native"/>
        </id>
        <version name="version" access="field" column="VERSION" type="long"/>

        <property name="cisDest" type="string" column="CISDEST" length="7" not-null="true"/>
        <property name="revRecovery" type="boolean" not-null="true"/>
        <property name="deleteUld" type="boolean" not-null="true"/>
        <property name="inbound" type="boolean" not-null="true"/>
        <property name="aaEnabled" type="boolean" not-null="true"/>
        <property name="wsUpldTool" type="boolean" not-null="true"/>        
        <property name="locationType" type="string" column="LOCATIONTYPE" length="2" not-null="true"/>
        <set name="groups" table="LOCATIONGROUPS" cascade="save-update" access="field">
            <key column="LOCATION_ID"/>
            <many-to-many class="LocationGroup" column="GROUP_ID"/>
        </set>
    </class>
</hibernate-mapping>

对于选址模型类只是setter和getter方法。

我需要我的第二个表如上映射在同一个映射文件,并需要使用相同的模型类的getter和setter方法。

Answer 1:

根据您的澄清,你想看看<join/> 但是,当你没有给出具体细节,我只能帮你笼统。 基本上<join/>相同的功能JPA @SecondaryTable ),可以以治疗2个表之间的连接的列作为一个组合的行来定义基本类型为您的实体。 有一些注意事项到诸如期望“共享主密钥”(又名真一到一)套; 看到的全部细节的文档。 总之,假设你有一个名为辅助表location_supp与PK名为location_id是指背部(FK)到Location.LocationId ,你会说:

<class name="Location" table="Location" ...>
    <id name="id" column="LocationId" .../>
    <property name="name" column="name" .../>
    <!-- mappings for other columns from Location table -->

    <join table="location_supp">
        <!-- 
            key defines the pk column of that joined table which is assumed to 
            also be the foreign-key source column referring back to Location
        -->
        <key column="location_id"/>

        <!-- mappings for columns from location_supp table -->
    </join>

</class>


Answer 2:

<?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 package="com.url.hiber.action">
    <class name="AxisFandAuser" table="axisFandA_user" dynamic-insert="true" dynamic-update="true">

     <id name="userId" column="userId">
        <generator class="native" />
    </id>   
     <property name="userFName" column="userFName"/>

    <property name="userMName" column="userMName"/>

     <property name="userLName" column="userLName"/>

    <property name="username" column="username"/>

     <property name="userEmailId" column="userEmailId"/>

    <property name="userOfficeLNumber" column="userOfficeLNumber"/>

    <property name="userExtention" column="userExtention"/>

     <property name="userMNumber" column="userMNumber"/>

    <property name="userPassword" column="userPassword"/>

    <property name="lock" column="lock"/>

    <!-- <property name="roleId" column="roleId"/>-->

    <many-to-one name="axisFandARole" class="com.url.hiber.action.AxisFandARole" fetch="select">
    <column name="roleId" not-null="false" />
</many-to-one>
    <set name="axisFandAservice" table="axisFandA_service" inverse="true" lazy="true" fetch="select">
        <key>
            <column name="userId" not-null="false" />
        </key>
        <one-to-many class="com.url.hiber.action.AxisFandAservice" />
</set>

<set name="axisFandAgroundRule" table="axisFandA_groundRule" inverse="true" lazy="true" fetch="select">
        <key>
            <column name="userId" not-null="false" />
        </key>
        <one-to-many class="com.url.hiber.action.AxisFandAgroundRule" />
</set>
<set name="quantumLogDetail" table="axisFandA_quantumLogDetail" inverse="true" lazy="true" fetch="select">
        <key>
            <column name="userId" not-null="false" />
        </key>
        <one-to-many class="com.url.hiber.action.QuantumLogDetail" />
    </set>
  </class>  
</hibernate-mapping>


文章来源: Hibernate Mapping two tables in one hbm file with same class name?