5

为了避免 Hibernate 给我懒惰的 javassist 实例代理而不是真正的实体,我需要改变什么?

更新:我正在使用 Spring 3.x 和 Hibernate 4.x

我用来加载实体的 API 是org.hibernate.internal.SessionImpl#load(Person.class, Id)简单的映射:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="org.perfectjpattern.example.model">
<class name="Person" table="PERSON_" >
    <id name="id">
        <generator class="native"></generator>
    </id>
    <property name="name" update="false" />
    <property name="age" update="true" />
</class>

<query name="Person.findByName">
    <![CDATA[select p from Person p where p.name = ? ]]>
</query>

<query name="Person.findByAge">
    <![CDATA[select p from Person p where p.age = :Age ]]>
</query>
</hibernate-mapping>
4

3 回答 3

5

使用get()而不是load()

于 2012-12-24T17:24:00.790 回答
1

Hibernate.initialize(obj)之后可以使用session.load(id)

此方法可以立即初始化您的 obj。

于 2012-12-25T10:34:46.380 回答
0

实际上通过简单地将映射更改为(参见default-lazy="false")来解决它:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="org.perfectjpattern.example.model" default-lazy="false">
于 2012-12-24T17:26:11.983 回答