1

I am relatively new and trying to load child entities using one-to-many mappings. But, during initializing process, I see only one entity being loaded. The child table associated has 3 more rows which are not loaded though I see the query getting 4 rows back which is correct. Hibernate is not initializing.

If you see the bold in the log trace, you see the first row being initialized, but after that none of the remaining rows are initialized. Not sure what the problem is. Please provide some helpful pointers. Many thanks.

-Ron

Below is code snippets:

EMP table; 
EMP_ACCT table;

    EMP_ID  ACCT_TYPE          ACCT_VAL

------  ---------          --------

1001    checking       test val

1001    savings            test val1

1001    high yield savings test val2

1001    simple checking    test val3


    <!-- EMP table -->
    <hibernate-mapping>
    <class name="com.Employee" table="EMP" dynamic-update="true">
        <id name="empId" type="java.lang.Integer">
            <column name="EMP_ID" precision="5" scale="0" />   
            <generator class="assigned"></generator>        
        </id>
        <property name="empName" type="java.lang.String">
            <column name="EMP_NAME" length="100"/>
        </property>          
        <set name="empAcctDetails" inverse="false" lazy="false" table="EMP_ACCT" 
                        cascade="all" fetch="subselect">
            <key>
                <column name="EMP_ID" />
            </key>
            <one-to-many class="com.EmployeeAcctDetails" />
        </set>  
    </class>
    </hibernate-mapping>

    <!-- EMP_ACCT table -->
    <hibernate-mapping>
    <class name="com.EmployeeAcctDetails" table="EMP_ACCT" dynamic-update="true">

        <id name="empId" type="java.lang.Integer">
            <column name="EMP_ID" precision="5" scale="0" />   
            <generator class="assigned"></generator>        
        </id>
        <property name="acctName" type="java.lang.String">
            <column name="ACCT_NAME" length="20"/>
        </property>          
        <property name="acctValue" type="java.lang.String">
                <column name="ACCT_VALUE" length="30" />
        </property>  

        <many-to-one name="emp" class="com.domain.Employee" update="false"    insert="false">
            <column name="EMP_ID" />
        </many-to-one>

    </class>

    </hibernate-mapping>


Log trace:
---------

2013-03-10 12:13:29,558 DEBUG  [org.hibernate.SQL]- 
    /* load one-to-many com.domain.Employee.empAcctDetails */ select
        empacctdet0_.EMP_ID as EMP1_1_,
        empacctdet0_.EMP_ID as EMP1_81_0_,
        empacctdet0_.ACCT_NAME as ACCT2_81_0_,
        empacctdet0_.ACCT_VALUE as ACCT3_81_0_ 
    from
        EMP_ACCT empacctdet0_ 
    where
        empacctdet0_.EMP_ID=?
Hibernate: 
    /* load one-to-many com.domain.Employee.empAcctDetails */ select
        empacctdet0_.EMP_ID as EMP1_1_,
        empacctdet0_.EMP_ID as EMP1_81_0_,
        empacctdet0_.ACCT_NAME as ACCT2_81_0_,
        empacctdet0_.ACCT_VALUE as ACCT3_81_0_ 
    from
        EMP_ACCT empacctdet0_ 
    where
        empacctdet0_.EMP_ID=?
2013-03-10 12:13:29,558 TRACE  [org.hibernate.jdbc.AbstractBatcher]- preparing statement
2013-03-10 12:13:29,604 TRACE  [org.hibernate.type.IntegerType]- binding '1001' to parameter: 1
2013-03-10 12:13:29,683 DEBUG  [org.hibernate.jdbc.AbstractBatcher]- about to open ResultSet (open ResultSets: 0, globally: 0)
2013-03-10 12:13:29,683 DEBUG  [org.hibernate.loader.Loader]- result set contains (possibly empty) collection: [com.domain.Employee.empAcctDetails#1001]
2013-03-10 12:13:29,683 TRACE  [org.hibernate.engine.loading.LoadContexts]- constructing collection load context for result set [oracle.jdbc.driver.OracleResultSetImpl@23102310]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.engine.loading.CollectionLoadContext]- starting attempt to find loading collection [[com.domain.Employee.empAcctDetails#1001]]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.engine.loading.CollectionLoadContext]- collection not yet initialized; initializing
2013-03-10 12:13:29,698 TRACE  [org.hibernate.loader.Loader]- processing result set
2013-03-10 12:13:29,698 DEBUG  [org.hibernate.loader.Loader]- result set row: 0
2013-03-10 12:13:29,698 TRACE  [org.hibernate.type.IntegerType]- returning '1001' as column: EMP1_81_0_
2013-03-10 12:13:29,698 DEBUG  [org.hibernate.loader.Loader]- result row: EntityKey[com.domain.EmployeeAcctDetails#1001]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.loader.Loader]- Initializing object from ResultSet: [com.domain.EmployeeAcctDetails#1001]
**2013-03-10 12:13:29,698 TRACE  [org.hibernate.persister.entity.AbstractEntityPersister]- Hydrating entity: [com.domain.EmployeeAcctDetails#1001]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.type.StringType]- returning 'checking' as column: ACCT2_81_0_
2013-03-10 12:13:29,698 TRACE  [org.hibernate.type.StringType]- returning 'test val' as column: ACCT3_81_0_
2013-03-10 12:13:29,698 TRACE  [org.hibernate.type.IntegerType]- returning '1001' as column: EMP1_81_0_
2013-03-10 12:13:29,698 TRACE  [org.hibernate.type.IntegerType]- returning '1001' as column: EMP1_1_**
2013-03-10 12:13:29,698 DEBUG  [org.hibernate.loader.Loader]- found row of collection: [com.domain.Employee.empAcctDetails#1001]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.engine.loading.CollectionLoadContext]- starting attempt to find loading collection [[com.domain.Employee.empAcctDetails#1001]]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.engine.loading.LoadContexts]- attempting to locate loading collection entry [CollectionKey[com.domain.Employee.empAcctDetails#1001]] in any result-set context
2013-03-10 12:13:29,698 TRACE  [org.hibernate.engine.loading.LoadContexts]- collection [CollectionKey[com.domain.Employee.empAcctDetails#1001]] located in load context
2013-03-10 12:13:29,698 TRACE  [org.hibernate.engine.loading.CollectionLoadContext]- found loading collection bound to current result set processing; reading row
2013-03-10 12:13:29,698 TRACE  [org.hibernate.type.IntegerType]- returning '1001' as column: EMP1_1_
2013-03-10 12:13:29,698 TRACE  [org.hibernate.event.def.DefaultLoadEventListener]- loading entity: [com.domain.EmployeeAcctDetails#1001]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.event.def.DefaultLoadEventListener]- attempting to resolve: [com.domain.EmployeeAcctDetails#1001]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.event.def.DefaultLoadEventListener]- resolved object in session cache: [com.domain.EmployeeAcctDetails#1001]
2013-03-10 12:13:29,698 DEBUG  [org.hibernate.loader.Loader]- result set row: 1
2013-03-10 12:13:29,698 TRACE  [org.hibernate.type.IntegerType]- returning '1001' as column: EMP1_81_0_
2013-03-10 12:13:29,698 DEBUG  [org.hibernate.loader.Loader]- result row: EntityKey[com.domain.EmployeeAcctDetails#1001]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.type.IntegerType]- returning '1001' as column: EMP1_1_
2013-03-10 12:13:29,698 DEBUG  [org.hibernate.loader.Loader]- found row of collection: [com.domain.Employee.empAcctDetails#1001]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.engine.loading.CollectionLoadContext]- starting attempt to find loading collection [[com.domain.Employee.empAcctDetails#1001]]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.engine.loading.LoadContexts]- attempting to locate loading collection entry [CollectionKey[com.domain.Employee.empAcctDetails#1001]] in any result-set context
2013-03-10 12:13:29,698 TRACE  [org.hibernate.engine.loading.LoadContexts]- collection [CollectionKey[com.domain.Employee.empAcctDetails#1001]] located in load context
2013-03-10 12:13:29,698 TRACE  [org.hibernate.engine.loading.CollectionLoadContext]- found loading collection bound to current result set processing; reading row
2013-03-10 12:13:29,698 TRACE  [org.hibernate.type.IntegerType]- returning '1001' as column: EMP1_1_
2013-03-10 12:13:29,698 TRACE  [org.hibernate.event.def.DefaultLoadEventListener]- loading entity: [com.domain.EmployeeAcctDetails#1001]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.event.def.DefaultLoadEventListener]- attempting to resolve: [com.domain.EmployeeAcctDetails#1001]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.event.def.DefaultLoadEventListener]- resolved object in session cache: [com.domain.EmployeeAcctDetails#1001]
2013-03-10 12:13:29,698 DEBUG  [org.hibernate.loader.Loader]- result set row: 2
2013-03-10 12:13:29,698 TRACE  [org.hibernate.type.IntegerType]- returning '1001' as column: EMP1_81_0_
2013-03-10 12:13:29,698 DEBUG  [org.hibernate.loader.Loader]- result row: EntityKey[com.domain.EmployeeAcctDetails#1001]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.type.IntegerType]- returning '1001' as column: EMP1_1_
2013-03-10 12:13:29,698 DEBUG  [org.hibernate.loader.Loader]- found row of collection: [com.domain.Employee.empAcctDetails#1001]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.engine.loading.CollectionLoadContext]- starting attempt to find loading collection [[com.domain.Employee.empAcctDetails#1001]]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.engine.loading.LoadContexts]- attempting to locate loading collection entry [CollectionKey[com.domain.Employee.empAcctDetails#1001]] in any result-set context
2013-03-10 12:13:29,698 TRACE  [org.hibernate.engine.loading.LoadContexts]- collection [CollectionKey[com.domain.Employee.empAcctDetails#1001]] located in load context
2013-03-10 12:13:29,698 TRACE  [org.hibernate.engine.loading.CollectionLoadContext]- found loading collection bound to current result set processing; reading row
2013-03-10 12:13:29,698 TRACE  [org.hibernate.type.IntegerType]- returning '1001' as column: EMP1_1_
2013-03-10 12:13:29,698 TRACE  [org.hibernate.event.def.DefaultLoadEventListener]- loading entity: [com.domain.EmployeeAcctDetails#1001]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.event.def.DefaultLoadEventListener]- attempting to resolve: [com.domain.EmployeeAcctDetails#1001]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.event.def.DefaultLoadEventListener]- resolved object in session cache: [com.domain.EmployeeAcctDetails#1001]
2013-03-10 12:13:29,698 DEBUG  [org.hibernate.loader.Loader]- result set row: 3
2013-03-10 12:13:29,698 TRACE  [org.hibernate.type.IntegerType]- returning '1001' as column: EMP1_81_0_
2013-03-10 12:13:29,698 DEBUG  [org.hibernate.loader.Loader]- result row: EntityKey[com.domain.EmployeeAcctDetails#1001]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.type.IntegerType]- returning '1001' as column: EMP1_1_
2013-03-10 12:13:29,698 DEBUG  [org.hibernate.loader.Loader]- found row of collection: [com.domain.Employee.empAcctDetails#1001]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.engine.loading.CollectionLoadContext]- starting attempt to find loading collection [[com.domain.Employee.empAcctDetails#1001]]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.engine.loading.LoadContexts]- attempting to locate loading collection entry [CollectionKey[com.domain.Employee.empAcctDetails#1001]] in any result-set context
2013-03-10 12:13:29,698 TRACE  [org.hibernate.engine.loading.LoadContexts]- collection [CollectionKey[com.domain.Employee.empAcctDetails#1001]] located in load context
2013-03-10 12:13:29,698 TRACE  [org.hibernate.engine.loading.CollectionLoadContext]- found loading collection bound to current result set processing; reading row
2013-03-10 12:13:29,698 TRACE  [org.hibernate.type.IntegerType]- returning '1001' as column: EMP1_1_
2013-03-10 12:13:29,698 TRACE  [org.hibernate.event.def.DefaultLoadEventListener]- loading entity: [com.domain.EmployeeAcctDetails#1001]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.event.def.DefaultLoadEventListener]- attempting to resolve: [com.domain.EmployeeAcctDetails#1001]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.event.def.DefaultLoadEventListener]- resolved object in session cache: [com.domain.EmployeeAcctDetails#1001]
2013-03-10 12:13:29,698 TRACE  [org.hibernate.loader.Loader]- done processing result set (4 rows)
ron0102
  • 13
  • 4

1 Answers1

0

You defined EMP_ID as the primary key column of the entity EmployeeAcctDetails. This doesn't make any sense, since there are several rows in the corresponding table with the same EMP_ID value.

Add a real primary key column to the table, and use that as the primary key column.

JB Nizet
  • 678,734
  • 91
  • 1,224
  • 1,255