gpt4 book ai didi

java - Hibernate 一对多 + 延迟加载

转载 作者:行者123 更新时间:2023-12-04 06:34:57 25 4
gpt4 key购买 nike

我有一个 Account 实体和一个 AccountTransaction 实体。

账户 1 <----> n 账户交易

在我的 AccountTransaction.hbm.xml 中,我指定了一个多对一的关系:

<hibernate-mapping>
<class name="com.walshk.accountmanager.domain.AccountTransaction" table="AccountTransaction">

<id name="id" type="long" column="transaction_id">
<generator class="increment"/>
</id>

<property name="date" not-null="true" type="date" column="transaction_date"/>

<property name="description" not-null="true" column="transaction_description" length="500"/>

<property name="amount" column="transaction_amount" not-null="true"/>

<many-to-one name="account" column="account_id" not-null="true" cascade="all" lazy="false"/>

</class>
</hibernate-mapping>

这允许我使用帐户查找 AccountTransactions
Criteria criteria = session.createCriteria(AccountTransaction.class)
.add(Restrictions.eq("account", account));

并且还允许我使用 AccountTransaction#getAccount() 获取 Account 实例;

我现在想做的是提供一种获取帐户的方法,例如
Criteria criteria = session.createCriteria(Account.class).add(Restrictions.eq("id", id));

但我也希望 Account 实体有一个方法
List<AccountTransaction> getTransactions();

我希望这是延迟加载的,因为我可能甚至不需要列出交易。

由于我已经从 AccountTransaction 中指定了多对一的关系,我现在如何指定一个一对多的关系,让我可以从另一个方向进行访问。

此外,处理延迟加载的最佳方法是什么,我是否必须为每个实体分配一个 session 而不是关闭 session ?不过,我可能会打开太多 session 。

谢谢。

最佳答案

如果您在 Account 类 hibernate 映射中添加一对多关联,您将获得:

List<AccountTransaction> getTransactions();

来自任何 ORM 创建工具。
此关联的参数之一是加载类型 - 我不熟悉 XML 映射中的确切语法,因为我们使用注释,但您可能会在 hibernate XML 映射的任何引用/文档页面中找到它。

关于java - Hibernate 一对多 + 延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4984871/

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