我有一个 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/