java - Hibernate一对多+延迟加载

标签 java hibernate hibernate-mapping

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

相关文章:

java - 创建名称为 "sessionFactory"的 bean 时出错

Java8 : "Translate" old ForEach Method into Lambda/Stream

java - Spring 框架项目未加载?

mysql - 如何在同一个Hibernate事务中保存两个数据库记录?

java - 我对 Hibernate Spring 感到困惑

java - 如何在 Struts 2 中访问 OGNL 跟踪评估?

Java - 使用 KeyPressed 更改另一个类中矩形的位置

java - 添加子级时,Hibernate 是否自动添加父级?

java - hibernate 中的一对多映射。值即将为空

java - Java 中的 Hibernate 映射 : org. hibernate.MappingException:实体映射中的重复列