问题描述
|
在Hibernate中是否可以描述以下映射:
+------+ +------+
|Table1| |Table2|
+------+ +------+
|t1_id | -------+ |t2_id |
+------+ +------- |t1_id |
|data_1|
|data_2|
+------+
类由“ 1”描述,具有两个“ 2”:“ 3”和“ 4”,或者我绝对必须在两个表上划分它?
如果您不介意,请使用.hbm.xml
样式。
解决方法
它只需要一张地图:
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;