我的映射文件有问题,涉及一对一关系,复合主键,其中键的字段名称不匹配。
表格1:
<class entity-name="CompPkTest" table="compPkTest" catalog="data" mutable="true" polymorphism="implicit" dynamic-update="false" dynamic-insert="false" select-before-update="false" optimistic-lock="version">
<composite-id mapped="false" unsaved-value="undefined">
<key-property name="id1" type="int">
<column name="id1"/>
</key-property>
<key-property name="id2" type="int">
<column name="id2"/>
</key-property>
</composite-id>
<property name="details" type="string" unique="false" optimistic-lock="true" lazy="false" generated="never">
<column name="Details" length="500"/>
</property>
<one-to-one name="CompPkTestDetail" entity-name="CompPkTestDetail" constrained="false" embed-xml="true"/>
表 2:
<class entity-name="CompPkTestDetail" table="compPkTestDetail" catalog="data" mutable="true" polymorphism="implicit" dynamic-update="false" dynamic-insert="false" select-before-update="false" optimistic-lock="version">
<composite-id mapped="false" unsaved-value="undefined">
<key-property name="idetail1" type="int">
<column name="idetail1"/>
</key-property>
<key-property name="idetail2" type="int">
<column name="idetail2"/>
</key-property>
</composite-id>
<one-to-one name="CompPkTest" entity-name="CompPkTest" constrained="true" embed-xml="true"/>
<property name="someDetail" type="string" unique="false" optimistic-lock="true" lazy="false" generated="never">
<column name="someDetail" length="300"/>
</property>
<property name="moreDetail" type="string" unique="false" optimistic-lock="true" lazy="false" generated="never">
<column name="moreDetail" length="300"/>
</property>
问题是查询表1时,“details”属性为空。如果我将 CompPkTestDetail 中的键属性名称更改为 id1 和 id2(同时保持列名不变),则关系按预期工作,并且查询返回“详细信息”的值。
我的问题:
上述映射 xml 是否是建立这种关联的正确方法(使用不匹配的字段名称)?
hibernate 强制字段名称必须匹配是否正确,或者这是一个错误?
请注意,在我的应用程序中没有实体类,并且休眠处于地图模式。我的应用程序可以完全动态地访问(任意)数据库,因此映射的 xml 是在运行时生成的。