如何使用hibernate对映射对象进行特定查询

时间:2015-02-05 11:17:40

标签: java hibernate hibernate-mapping hibernate-criteria

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

我用Hibernate映射了这个数据库;当我从数据库中获得菜单对象时,我也可以正确地获得 menu_autorization 授权对象。

对于每个菜单对象,我有很多 menu_autorization 对象。

到目前为止我写的查询让我获得了DB中的所有菜单对象;我想要做的是写一个查询,让我得到一个具有特定 menu_autorization 菜单对象。

我怎么能这样做,因为我没有菜单中的授权字段? 也许我可以使用Criteria来做,但我不知道如何。

我在Menu.class中有这个映射

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

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;
        ....

,这在Authorization.class

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

1 个答案:

答案 0 :(得分:3)

你可以使用JPQL这样做

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

使用Criteria API,你可以这样做

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