Hi all,

Neviem ako napisat metodu, kt. mi pre danu citacku kariet vrati karty:

public class Karta {
        private Long id;
        private String kod;

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

        public String getKod() {
                return kod;
        }
        public void setKod(String kod) {
                this.kod = kod;
        }

        @Override
        public String toString() {
                return "Karta [id: " + id + ", kod: " + kod + "]";
        }
}

public class Citacka {
        private Long id;
        private String kod;
        private Set<Karta> karty;

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

        public String getKod() {
                return kod;
        }
        public void setKod(String kod) {
                this.kod = kod;
        }

        public Set<Karta> getKarty() {
                return karty;
        }
        public void setKarty(Set<Karta> karty) {
                this.karty = karty;
        }

        @Override
        public String toString() {
                return "Citacka [id: " + id + ", kod: " + kod + "]";
        }
}

<?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 package="sk.gamo.ins.dto">
        <class name="Karta" table="KARTA">
                <id name="id" column="KAR_ID" type="java.lang.Long">
                        <generator class="sequence">
                                <param name="sequence">SEQ_KARTA</param>
                        </generator>
                </id>
                <property name="kod" column="KAR_KOD" not-null="true" />
        </class>
</hibernate-mapping>

<?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 package="sk.gamo.ins.dto">
        <class name="Citacka" table="CITACKA">
                <id name="id" column="CIT_ID" type="java.lang.Long">
                        <generator class="sequence">
                                <param name="sequence">SEQ_CITACKA</param>
                        </generator>
                </id>
                <property name="kod" column="CIT_KOD" not-null="true" />
                <set name="karty" table="C_K" cascade="save-update" lazy=
"true">
                        <key column="CK_CITACKA" />
                        <many-to-many column="CK_KARTA" class="Karta" />
                </set>
        </class>
</hibernate-mapping>

No a teraz sa snazim nacitat karty pre citacku s id = 1:

public Set<Karta> getKartyForCitacka() {
        Session session = hibernateTemplate
.getSessionFactory().openSession();
        try {
                Citacka citacka = (Citacka) session.load(Citacka.class, 
new Long(1));
                return citacka.getKarty();
        } catch (Exception e) {
                e.printStackTrace();
        } finally {
                session.close();
        }
}

Stale mi to vsak pada na tuto vynimku:

org.hibernate.LazyInitializationException: failed to lazily initialize a 
collection of role: Citacka.karty, no session or session was closed

Ak vsak dam lazy="false", tak mi to funguje, ale citat pre kazdu citacku 
1000ky kariet, ked ju loadnem je pekne o nicom :(((

Michal

Odpovedet emailem