我想使用hibernate来包含对象的层次结构,但是discriminator列是另一个包含定义子类类型的CODE的表的外键。
是否可以将连接表中的代码指定为鉴别器,还是必须使用键值并希望键保持一致?
e.g。 discriminator =“square | circle”vs.s.鉴别= “0 | 1”
table:shape
area=25 shape_type_fk=0
area=10 shape_type_fk=1
table:shape_types
ID CODE
0 square
1 circle
答案 0 :(得分:1)
快速测试表明你可以这样做:
<?xml version="1.0"?>
<!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">
<class name="Shape" abstract="true">
<id name="id"/>
<discriminator formula="select CODE from SHAPE_TYPES st where st.ID=SHAPE_TYPE"/>
<version name="version"/>
<subclass name="Square" discriminator-value="square"/>
<subclass name="Circle" discriminator-value="circle"/>
</class>
</hibernate-mapping>
现在,此映射不会创建公式中引用的SHARE_TYPE
表,也不会将SHAPE_TYPE
列添加到SHAPE
表中。这可以在Hibernate从类路径中自动读取的import.sql
文件中,或者通过将另一个类映射到该表来完成。
答案 1 :(得分:-1)
看起来您需要使用join-subclass而不是子类。详细信息为here。