DB Table REQUEST:
{
primary key REQUEST_ID,
String REQUEST_DETAILS
}
DB Table INVALID_REQUEST_DETAILS{
(foreign key, primary key) fk_req_id references REQUEST.REQUEST_ID,
String INVALID_COMMENTS,
String APPROVER_NAME
}
如您所见,一个 REQUEST 对应一个 INVALID_REQUEST_DETAILS。出于某种我不明白的原因,我听说 Hibernate 将此映射为多对一关系。我的 .hbm.xml 文件有以下代码:
<hibernate-mapping>
<class name="InvalidRequestDetails" table="INVALID_REQUEST_DETAILS">
<id name="id" column="fk_req_id">
<generator class="foreign">
<param name="property">request</param>
</generator>
</id>
... (other column mappings omitted) ...
<many-to-one name="request" class="Request" unique="true" not-null="true" />
</class>
</hibernate-mapping>
除非您还提供一些解释,否则请不要让我引用“阅读 hibernate 文档”,它包含非常稀疏的概念解释,我已经阅读过。我遇到的问题是我的映射文件显然是错误的,因为我无法将任何记录插入到我的表中。
问题:
- 如何修复我的 .hbm.xml 文件?为什么?
- 如果我有如上所述的逻辑一对一关系,为什么我需要一个多对一标签?多对一和一对一之间的真正区别是什么?你什么时候用哪个?如果我的外键不是主键,会有什么变化吗?
最佳答案
不确定您从哪里获得信息,但您当然可以将其建模为一对一。 Here's一个例子。
<hibernate-mapping>
<class name="InvalidRequestDetails" table="INVALID_REQUEST_DETAILS">
<id name="id" column="fk_req_id">
<generator class="foreign">
<param name="property">request</param>
</generator>
</id>
... (other column mappings omitted) ...
<one-to-one name="request" class="Request" constrained="true" />
</class>
</hibernate-mapping>
关于java - Hibernate外键为主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15260819/