Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Hibernate LazyInitializationException


Автор: megaproger 8.9.2006, 08:06
Здравствуйте, у меня следующая проблема:

Имеется класс:
Код

import java.io.Serializable;
import java.util.Calendar;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;

/**
 * @hibernate.class table="treewdate"
 */
public class TreeWDate implements Serializable {

    /**
     * identifier field
     */
    private Long id;

    /**
     * nullable persistent field
     */
    private String name;

    /**
     * nullable persistent field
     */
    private java.util.Calendar createdate;

    /**
     * nullable persistent field
     */
    private com.ics.kiosk.manager.dbkiosk.mapping.Tree tree;

    /**
     * full constructor
     */
    public TreeWDate(Long id, String name, Calendar createdate, Tree tree) {
        this.id = id;
        this.name = name;
        this.createdate = createdate;
        this.tree = tree;
    }

    public TreeWDate(String name, Calendar createdate, Tree tree) {
        this.name = name;
        this.createdate = createdate;
        this.tree = tree;
    }

    /**
     * default constructor
     */
    public TreeWDate() {
    }

    /**
     * minimal constructor
     */
    public TreeWDate(Long id) {
        this.id = id;
    }

    /**
     * @hibernate.id generator-class="assigned"
     * type="java.lang.Long"
     * column="id"
     */
    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    /**
     * @hibernate.property column="name"
     * length="20"
     */
    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    /**
     * @hibernate.property column="createdate"
     * length="2147483647"
     */
    public Object getCreatedate() {
        return this.createdate;
    }

    public void setCreatedate(Calendar createdate) {
        this.createdate = createdate;
    }

    /**
     * @hibernate.many-to-one unique="true"
     * @hibernate.column name="treeid"
     */
    public com.ics.kiosk.manager.dbkiosk.mapping.Tree getTree() {
        return this.tree;
    }

    public void setTree(com.ics.kiosk.manager.dbkiosk.mapping.Tree tree) {
        this.tree = tree;
    }

    public String toString() {
        return new ToStringBuilder(this)
                .append("id", getId())
                .toString();
    }

    public boolean equals(Object other) {
        if (!(other instanceof TreeWDate)) return false;
        TreeWDate castOther = (TreeWDate) other;
        return new EqualsBuilder()
                .append(this.getId(), castOther.getId())
                .isEquals();
    }

    public int hashCode() {
        return new HashCodeBuilder()
                .append(getId())
                .toHashCode();
    }


}

Имеется файл маппинга:
Код

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
    
<hibernate-mapping>
<!-- 
    Created by the Middlegen Hibernate plugin 2.1

    http://boss.bekk.no/boss/middlegen/
    http://www.hibernate.org/
-->

<class 
    name="com.ics.kiosk.manager.dbkiosk.mapping.TreeWDate"
    table="treewdate"
>
    <meta attribute="class-description" inherit="false">
       @hibernate.class
        table="treewdate"
    </meta>

    <id
        name="id"
        type="java.lang.Long"
        column="id"
    >
        <meta attribute="field-description">
           @hibernate.id
            generator-class="assigned"
            type="java.lang.Long"
            column="id"

        </meta>
        <generator class="native" />
    </id>

    <property
        name="name"
        type="java.lang.String"
        column="name"
        length="20"
    >
        <meta attribute="field-description">
           @hibernate.property
            column="name"
            length="20"
        </meta>    
    </property>
    <property
        name="createdate"
        type="java.util.Calendar"
        column="createdate"
        length="2147483647"
    >
        <meta attribute="field-description">
           @hibernate.property
            column="createdate"
            length="2147483647"
        </meta>    
    </property>

    <!-- Associations -->
  
    <!-- bi-directional one-to-one association to Tree -->
    <many-to-one
        name="tree"
        class="com.ics.kiosk.manager.dbkiosk.mapping.Tree"
        unique="true"
    >
        <meta attribute="field-description">
           @hibernate.many-to-one
            unique="true"
           @hibernate.column name="treeid"         
        </meta>
        <column name="treeid" />
    </many-to-one>

</class>
</hibernate-mapping>



Когда выполняешь запроса вида:   List list=session.createQuery("from TreeWDate").list();
объекты Tree формируются пустыми и с Exception' ом :

Method threw 'org.hibernate.LazyInitializationException' exception.Failed to evaluate toString for this object;

Подскажите пожалуйста, что делать? или каким путем идти?

Автор: tux 8.9.2006, 08:53
Сложно сказать. Единственное место, где может вывалиться LazyInitializationException - это получение атрибута tree. Приведи полный код, в котором выбрасывается исключение. Так совершенно не понятно при чем здесь toString(), тем более ничего особого там нет. Еще бы не помешал Stack trace исключения пополнее.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)