Hibernate mapping - две карты в одной таблице - PullRequest
0 голосов
/ 14 апреля 2011

Возможно ли в Hibernate описать следующее отображение:

+------+                 +------+
|Table1|                 |Table2|
+------+                 +------+
|t1_id | -------+        |t2_id |
+------+        +------- |t1_id |
                         |data_1|
                         |data_2|
                         +------+

с классом, описанным Table1, имеющим два Map s: { t2_id : data_1 } и { t2_id : data_2 }, или я абсолютно обязанразделить его на два стола?

Если не возражаете, используйте стиль .hbm.xml.

1 Ответ

2 голосов
/ 14 апреля 2011

Требуется только одна карта:

public class Table1 {
    private int id;
    private Map<String, Table2> map;
}

public class Table2 {
    private String data_1;
    private String data_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 default-access="field" package="test">
    <class name="Table1" table="table1">
        <id column="ID" name="id">
            <generator class="native"/>
        </id>
        <map name="map" table="table2">
            <key column="TABLE1_ID"/>
            <map-key column="TABLE2_ID" length="32" type="string"/>
            <composite-element class="Table2">
                <property name="data_1" column="DATA_1" length="128"/>
                <property name="data_2" column="DATA_1" length="128"/>
            </composite-element>
        </map>
    </class>
</hibernate-mapping>

Схема, сгенерированная SchemaExport:

alter table table2 
    drop constraint FKCB773E242504FFD6;

drop table table1 if exists;

drop table table2 if exists;

create table table1 (
    ID integer generated by default as identity,
    primary key (ID)
);

create table table2 (
    TABLE1_ID integer not null,
    DATA_1 varchar(128),
    TABLE2_ID varchar(32) not null,
    primary key (TABLE1_ID, TABLE2_ID)
);

alter table table2 
    add constraint FKCB773E242504FFD6 
    foreign key (TABLE1_ID) 
    references table1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...