【发布时间】:2011-02-13 15:08:49
【问题描述】:
我有一个 Account 实体和一个 AccountTransaction 实体。
帐户 1 n AccountTransaction
在我的 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 中将关系指定为多对一,我现在如何指定一对多关系以允许我从另一个方向访问。
此外,处理延迟加载的最佳方法是什么,我是否必须为每个实体分配一个会话而不关闭会话?不过,我可能打开了太多会话。
谢谢。
【问题讨论】:
-
延迟加载不是默认的吗?尝试访问会话之外的事务 - 你应该得到一个异常。
-
是的。我只是不知道如何指定一对多关系,这为我提供了一种获取属于一个帐户的所有交易的方法。而且我不知道如何在延迟加载时避免异常。
-
P.s 我可以很容易地获得交易,使用标准并按帐户过滤。能够从 Account 实例本身获取它们会更方便,并且对我来说输入更少:)
标签: java hibernate hibernate-mapping