gpt4 book ai didi

java - Hibernate:如何获得反向连接的实体(一对一)

转载 作者:行者123 更新时间:2023-11-30 09:40:32 28 4
gpt4 key购买 nike

我有一个包含字段的Project


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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com