0

I have a tables as below

Person:

  • Integer ID(PK)
  • String Name

Address:

  • Integer addrs_Id(PK)
  • Integer person_Id(FK) - onetomany mapping to person
  • String address

Hibernate Mapping:

<hibernate-mapping>
    <class name="com.mypackage.Person" table="PERSON">
        <id name="id">
            <column name="ID"/>
            <generator class="increment"></generator>
        </id>

        <property name="name"></property>
        <bag name="address" table="ADDRESS" inverse="true" lazy="false" fetch="select" cascade="all">
            <key>
                <column name="PERSON_ID" not-null="false"/>
            </key>
            <one-to-many class="Address"/>
        </bag>

    </class>


    <class name="Address" table="ADDRESS">
        <id name="id">
            <column name="ADD_ID"/>
            <generator class="increment"></generator>
        </id>
        <property name="type" type="string" not-null="true" column="TYPE" length="1"/>
        <many-to-one name="person" class="Person" lazy="false" fetch="select">
            <column name="PERSON_ID" not-null="true"/>
        </many-to-one>
    </class>

</hibernate-mapping>

POJOs:

public class Person {

private int id;
private String name;
private List<Address> addresses;
....
// getters and setters defined
}

public class Address {

private int add_id;
private int person;
private String address;
....
// getters and setters defined
}

I need to retrieve data in 2 different contents

  • When Person is retrieved from DB, Addresses should be prepopulated - This works fine with the mapping done above
  • Retrieve Person without Address loaded, but want to load the address separately and attach to person (without lazy loading). How can this be achieved with simple Hibernate mapping?
Woodchuck
  • 3,869
  • 2
  • 39
  • 70

1 Answers1

0

Try below code -

Person p = sess.createCriteria(Person.class, id);
Hibernate.initialize(p.getAddresses());

refernce

Community
  • 1
  • 1
Narendra Pandey
  • 514
  • 4
  • 11
  • 26