我有一个带有字段的表项目
ID
PROJECT_BASELINE_ATTRIBUTES_ID (FK for table PROJECT_BASELINE_ATTR)
该表具有以下映射
<hibernate-mapping package="com.initech.db.model">
<class name="com.initech.db.model.Project" table="PROJECT">
<id name="id" column="id" type="java.lang.Long">
<meta attribute="use-in-tostring">true</meta>
<generator class="sequence">
<param name="sequence">PROJECT_ID_SEQ</param>
</generator>
</id>
<many-to-one name="projectBaselineAttributes" column="PROJECT_BASELINE_ATTRIBUTES_ID" class="com.initech.db.model.ProjectBaselineAttributes" cascade="all" not-null="true">
<meta attribute="use-in-tostring">true</meta>
</many-to-one>^
</class>
</hibernate-mapping>
相应的 Project.java 类具有字段
private Long id;
private ProjectBaselineAttributes projectBaselineAttributes;
此外,我有一个表PROJECT_BASELINE_ATTR,其中包含该字段
ID
Hibernate 映射:
<hibernate-mapping package="com.initech.db.model">
<class name="com.initech.db.model.ProjectBaselineAttributes" table="PROJECT_BASELINE_ATTR">
<id name="id" column="id" type="java.lang.Long">
<generator class="sequence">
<param name="sequence">PRO_BASE_ATTR_ID_SEQ</param>
</generator>
</id>
<set name="projects" table="PROJECT" inverse="true" lazy="true" fetch="select">
<key>
<column name="PROJECT_BASELINE_ATTRIBUTES_ID" precision="22" scale="0" not-null="true" />
</key>
<one-to-many class="com.initech.db.model.Project" />
</set>
</class>
</hibernate-mapping>
相应的 ProjectBaselineAttributes.java 类具有字段
private Long id;
private Set projects = new HashSet();
当前映射并不理想,因为两个表之间的关系实际上是一对一的,但在 ProjectBaselineAttributes 中我有一组项目,即使一个 ProjectBaseLine 属性总是有一个 Projet。 ProjectBaselineAttributes 的映射应该是什么样子,以便我可以“单独”获取关联的项目,即类 ProjectBaselineAttributes.java 看起来像这样:
private Long id;
private Project project;
最佳答案
这是 Hibernate documentation 的部分其中详细介绍了如何使用外键映射此类双向一对一关联。
<class name="Person">
<id name="id" column="personId">
<generator class="native"/>
</id>
<many-to-one name="address"
column="addressId"
unique="true"
not-null="true"/>
</class>
<class name="Address">
<id name="id" column="addressId">
<generator class="native"/>
</id>
<one-to-one name="person"
property-ref="address"/>
</class>
create table Person ( personId bigint not null primary key, addressId bigint not null unique )
create table Address ( addressId bigint not null primary key )
关于java - Hibernate:如何获得反向连接的实体(一对一),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9362430/