2011-04-14 64 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;