考虑我的数据库中的以下2个表:
FUNCTION_TABLE
FUNC_CD | INPUT_ATTR_ID | OUTPUT_ATTR_ID
multiply | 1 | 3
multiply | 2 | 3
multiply | 4 | 6
multiply | 5 | 6
ATTRIBUTE_TABLE
ATTR_ID | ATTR_NAME
1 | AttributeOne
2 | AttributeTwo
etc
My Function类应包含以下内容:
public class Function {
private String functionCode;
private Set<Attribute> inputAttributes;
private Attribute outputAttribute;
}
我的函数DAO将包含一个返回指定outputAttribute
的Function对象的方法我该如何映射?我看到的任何示例都需要集合的连接表。
到目前为止,我的地图包含以下内容:
<class name="my.Function" table="FUNCTION_TABLE">
<id name="functionCode" column="FUNC_CD" type="java.lang.String" />
<many-to-one name="outputAttribute" class="my.Attribute" column="OUTPUT_ATTR_ID"/>
</class>
但是,我对如何映射输入属性感到茫然,因为需要另一个表
答案 0 :(得分:0)
因为这是在数据库中表示这种情况的非标准方式,所以hibernate不支持这个ootb。
// Function as wrapper around parts
Function getFunction(String code, Attribute outattr)
{
List<FunctionPart> parts = session.createCriteria(FunctionPart.class)
.add(Expression.eq("functionCode", code))
.add(Expression.eq("outputAttribute", outattr))
.list()
return new Function(code, outattr, parts);
}
亲:简单 con:每个查询的函数,附加类,没有查询inattributes
使函数成为假实体并依赖于属性
<class name="my.Function" table="FUNCTION_TABLE" schemaction="none" where="todo INPUT_ATTR_ID = (min INPUT_ATTR_ID of same id)">
<id name="functionCode" column="FUNC_CD" type="java.lang.String" />
<many-to-one name="outputAttribute" class="my.Attribute" column="OUTPUT_ATTR_ID"/>
<sqlinsert>INSERT into TEMPTABLE</sqlinsert>
<sqlupdate>INSERT into TEMPTABLE</sqlupdate>
<set name="inputAttributes" class="my.Attribute" table="FUNCTION_TABLE" cascade="all">
<key>
<column name="FUNC_CD" />
<column name="OUTPUT_ATTR_ID" />
</key>
<many-to-many class="Attribute" column="INPUT_ATTR_ID">
</set>
</class>
亲:按照您的要求 con:hackish,不需要的join,如果不存在则必须创建临时表