Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Hiberate, strange behaviour and exception

2 views
Skip to first unread message

melhavoc

unread,
May 31, 2007, 7:15:24 AM5/31/07
to
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
}
[/code]

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;
}
[/code]

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>

[/code]

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.

0 new messages