MDP
MDP

Reputation: 4287

How to make a specific query on mapped objects with hibernate

  menu              menu_autorization                authorization
----------        -----------------------        -----------------------
|id|title|        |id|menu|authorization|        |id|authorization|info|
----------        -----------------------        -----------------------
  |                     |        |                |
  |---------------------|        |----------------|

I mapped this DB with Hibernate; when I get a Menu object from the database I also get, correctly, menu_autorization and authorization objects.

For each Menu object I have many menu_autorization objects.

The query I wrote so far makes me get all the menu objects in the DB; what I want to do is to write a query that makes me get a menu object with a specific menu_autorization.

How can I do it, since I don't have and authorization field in the table menu? Maybe I can do it using Criteria, but I don't know how.

I have this mapping in Menu.class

...
    @OneToMany(mappedBy="menu", fetch=FetchType.EAGER)  
        private Set<MenuAuthorization> menuAuthorization;
...

this mapping in MenuAuthorization.class

  ...

    @ManyToOne(targetEntity=Menu.class)
    @JoinColumn(name="menu",referencedColumnName="id")
    private Menu menu;

    @ManyToOne(targetEntity=Authorizazion.class)  
    @JoinColumn(name="authorizazion",referencedColumnName="id")
    private Authorizazion authorizazion;
        ....

and this in Authorization.class

...
@OneToMany(mappedBy="Authorization", fetch=FetchType.EAGER)
private Set<MenuAuthorization> MenuAuthorization;
...

Upvotes: 0

Views: 131

Answers (1)

Predrag Maric
Predrag Maric

Reputation: 24433

You can do it with JPQL using something like this

select m from Menu m join m.menuAuthorization ma where ma.id = :maId

Using Criteria API you could do it like this

Criteria criteria = session.createCriteria(Menu.class)
criteria.createAlias("menuAuthorization", "ma");
criteria.add(Restrictions.eq("ma.id", maId));
Menu menu = (Menu)criteria.uniqueResult();

Upvotes: 3

Related Questions