2011-04-14 65 views
0

兩個地圖是否有可能在Hibernate中描述下面的映射: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風格。

+0

是不是真的或只是< t1_id,data_1>? – Ralph 2011-04-14 07:19:43

+0

不幸的是,如果它是,那麼不需要映射,因爲它將是一對多關係。 – 2011-04-14 07:25:24

回答

2

它僅需要一個圖:

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;