Hibernate Criteria Join with 3 Tables
Asked Answered
H

1

64

I am looking for a hibernate criteria to get following:

Dokument.class is mapped to Role roleId

Role.class has a ContactPerson contactId

Contact.class FirstName LastName

I want to search for First or LastName on the Contact class and retrieve a list of Dokuments connected.

I have tried something like this:

session.createCriteria(Dokument.class)
.setFetchMode("role",FetchMode.JOIN)
.setFetchMode("contact",FetchMode.JOIN)
.add(Restrictions.eq("LastName","Test")).list();

I get an error could not resolve property "LastName" for class "Dokument"

Can someone explain why the join searches on Dokument and not on all joined tables?

Haber answered 4/1, 2012 at 11:50 Comment(0)
V
126

The fetch mode only says that the association must be fetched. If you want to add restrictions on an associated entity, you must create an alias, or a subcriteria. I generally prefer using aliases, but YMMV:

Criteria c = session.createCriteria(Dokument.class, "dokument");
c.createAlias("dokument.role", "role"); // inner join by default
c.createAlias("role.contact", "contact");
c.add(Restrictions.eq("contact.lastName", "Test"));
return c.list();

This is of course well explained in the Hibernate reference manual, and the javadoc for Criteria even has examples. Read the documentation: it has plenty of useful information.

Velamen answered 4/1, 2012 at 12:19 Comment(5)
JB thanks so much. Yeah I have read the specs, but for a Hibernate newbee it is quite hard to wrap one's head around all the Hibernate lingo. Again THANKS IT WORKS :-)Haber
btw what is an association, just some reference?Haber
An association is when an entity is linked to another entity with a OneToOne, OneToMany, ManyToOne or ManyToMany... association.Velamen
@JBNizet I would argue that the reference manual does not explain well. Unless you're better than me at relating cats and kittens to business objects.Bisson
After 10 years of using Hibernate, I finally found this, which helped me forward. Thanks :)Capsize

© 2022 - 2024 — McMap. All rights reserved.