Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠一对多+;延迟加载_Java_Hibernate_Hibernate Mapping - Fatal编程技术网

Java 休眠一对多+;延迟加载

Java 休眠一对多+;延迟加载,java,hibernate,hibernate-mapping,Java,Hibernate,Hibernate Mapping,我有一个账户实体和一个账户交易实体 帐户1和帐户事务 在my AccountTransaction.hbm.xml中,我指定了多对一关系: <hibernate-mapping> <class name="com.walshk.accountmanager.domain.AccountTransaction" table="AccountTransaction"> <id name="id" type="long" column="transaction_

我有一个账户实体和一个账户交易实体

帐户1和帐户事务

在my 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>
还允许我使用AccountTransaction#getAccount()获取Account实例

我现在想做的是提供一种获得帐户的方法,例如

Criteria criteria = session.createCriteria(Account.class).add(Restrictions.eq("id", id));
但是我也希望Account实体有一个方法

List<AccountTransaction> getTransactions();
List getTransactions();
我希望它是延迟加载的,因为我甚至不需要列出事务

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

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


谢谢。

为了使用延迟加载,您应该启用视图中的打开会话。 如果您使用的是Spring集成,那么您有OpenSessionViewIntereptor/OpenSessionInViewFilter

如果您使用的是没有Spring集成的本机Hibernate,那么您可以自己实现它。 请阅读以下内容:


希望有帮助。

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

List<AccountTransaction> getTransactions();
List getTransactions();
从任何ORM创建工具。
此关联的一个参数是加载类型-我不熟悉XML映射中的确切语法,因为我们使用注释,但您可能会在hibernate XML映射的任何参考/文档页面中找到它。

延迟加载不是默认的吗?尝试访问会话之外的事务-您应该会得到一个异常。是的。我只是不知道如何指定一对多关系,这为我提供了一种获取属于某个帐户的所有交易的方法。另外,我也不知道如何避免延迟加载时出现异常。P.s我可以很容易地获得交易,使用标准并按帐户过滤。如果能够从Account实例本身获取它们,会方便得多,而且对我来说输入更少:)是有意义的,但是在映射文件中没有一对多xml标记可以使用。我再看一看这些文件。谢谢。太棒了,我使用Account.hbm.xml文件中的xml标记实现了它。正是我想要的:)非常感谢。谢谢你的链接。关于延迟加载的帮助加载。我接受了你的回答,因为它回答了我问题的第二部分。不客气。这就是为什么我喜欢Spring,它允许我使用config中的一行进行惰性加载。我只是想确保我理解了基本的hibernate部分,并且在继续之前至少可以让一些东西工作起来。
List<AccountTransaction> getTransactions();