Hiberate, strange behaviour and exception

M

melhavoc

Hello, I am trying to make project for studies and I am doing
everything as tutorial says but I am getting strange exception:

org.hibernate.ObjectNotFoundException: No row with the given
identifier exists: [szzs.domain.registration.TaskTerm#203]
at org.hibernate.impl.SessionFactoryImpl
$1.handleEntityNotFound(SessionFactoryImpl.java:377)
at
org.hibernate.proxy.AbstractLazyInitializer.checkTargetState(AbstractLazyInitializer.java:
79)
at
org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:
68)
at
org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:
111)
at
org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:
140)
at szzs.domain.registration.TaskTerm$$EnhancerByCGLIB$
$3122036f.getSubject(<generated>)
at szzs.tests.HBtest.testRegisterProject(HBtest.java:105)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at
org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:
76)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:
38)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:
38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
460)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
673)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:
386)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:
196)



In situation like this:
Code:
Long idp, idt, idc, idr1, idr2;

        Session session1 = HibernateUtil.openSession();
    session1.beginTransaction();
        ProjectGroup p1=new ProjectGroup();
        TaskTerm t1=new TaskTerm();
        ConsultationTerm c1=new ConsultationTerm();
        Registry r1=new Registry();
        Registry r2=new Registry();

        t1.setSubject("TestSubject");
        t1.getMembers().put(p1, r1);

        c1.setSubject("TestSubjectofCON");
        c1.getMembers().put(p1,r2);

        idp=(Long) session1.save(p1);
        idt=(Long) session1.save(t1);
        idc=(Long) session1.save(c1);
        idr1=(Long) session1.save(r1);
        idr2=(Long) session1.save(r2);
        session1.getTransaction().commit();
    session1.close();

    Session session2 = HibernateUtil.openSession();
    session2.beginTransaction();

       ProjectGroup p2=(ProjectGroup)session2.load(ProjectGroup.class,
idp);
        TaskTerm t2=(TaskTerm) session2.load(TaskTerm.class, idt);
        ConsultationTerm c2=(ConsultationTerm)
session2.load(ConsultationTerm.class, idc);

         for (Engagement t : p2.getTaskTerms().keySet()){
                 System.out.println(t.getSubject());   <<<<<<<<<< Here
the exception is thrown, moreover p2.getTaskTerms().keySet()) has 2
elements whereas it should have just one
         }

My classes are (plus getters/setter and unimportant fields):

Code:
public abstract class Engagement {
        private Long id;
        private Map <ProjectGroup, Registry> members =new HashMap
<ProjectGroup, Registry> ();
}

public class ConsultationTerm extends Engagement {
}

public class TaskTerm extends Engagement{
}

public class ProjectGroup  extends RegistrationGroup{
        private Map  <TaskTerm, Registry > TaskTerms= new HashMap
<TaskTerm, Registry>();//inverse
        private Map  <ConsultationTerm, Registry > consultationTerms=
new HashMap <ConsultationTerm, Registry>();//inverse
}

public class RegistrationGroup {
        protected Long id;
}

public class Registry {
private Long id;
}

with mapping:

Code:
<class name="szzs.domain.registration.Engagement" abstract="true">
                <id name="id" column="ENGAGEMENT_ID">
                <generator class=...></id>

        <map name="members">
              <key column="ENGAGEMENT_ID" not-null="true"/>
              <map-key-many-to-many column="PROJECTGROUP_ID"
class="szzs.domain.registration.ProjectGroup"/>
              <one-to-many class="szzs.domain.registration.Registry"/>
        </map>

        <union-subclass name="szzs.domain.registration.TaskTerm"
table="TASKTERMS">
        </union-subclass>

        <union-subclass
name="szzs.domain.registration.ConsultationTerm"
table="CONSULTATIONTERMS">
        </union-subclass>
</class>

<class name="szzs.domain.registration.RegistrationGroup"
table="REGISTRATIONGROUPS">
        <id name="id" column="REGISTRATIONGROUP_ID">
                <generator class=...></id>

        <joined-subclass name="szzs.domain.registration.ProjectGroup"
table="PROJECTGROUPS">
                <key column="PROJECTGROUP_ID"/>

                <map name="taskTerms" inverse="true">
                     <key column="PROJECTGROUP_ID" not-null="true"/>
                     <map-key-many-to-many column="ENGAGEMENT_ID"
class="szzs.domain.registration.TaskTerm"/>
                     <one-to-many
class="szzs.domain.registration.Registry"/>
                </map>

                <map name="consultationTerms" inverse="true" >
                      <key column="PROJECTGROUP_ID" not-null="true"/>
                      <map-key-many-to-many column="ENGAGEMENT_ID"
class="szzs.domain.registration.ConsultationTerm"/>
                      <one-to-many
class="szzs.domain.registration.Registry"/>
                </map>
        </joined-subclass>
</class>

<class name="szzs.domain.registration.Registry" table="REGISTRIES">
                <id name="id" column="REGISTRY_ID">
                <generator class=...></id>
</class>

I really ask for help how should i map my classes to make them work.
For me it doesnt matter if i have to keep each of ProjectGroup -
ConsultationTerm and ProjectGroup -TaskTerm associations information
in different table, or to have one bonus column to remember to which
class is the association (like in many-to-any). Still i would like to
preserve explicite polymorphism, but not for all cost ofc.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Staff online

Members online

Forum statistics

Threads
473,769
Messages
2,569,577
Members
45,052
Latest member
LucyCarper

Latest Threads

Top