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

How to make a specific query on mapped objects with hibernate

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

我用 Hibernate 映射了这个数据库;当我从数据库中得到一个 Menu 对象时,我也正确地得到了 menu_autorizationauthorization 个对象。

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

到目前为止,我编写的查询使我获得了数据库中的所有菜单对象;我想做的是编写一个查询,让我得到一个 menu 对象,其中包含特定的 menu_autorization.

我怎么办,因为我在 table menu 中没有 授权 字段? 也许我可以使用 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;
...

你可以用 JPQL 使用类似这样的东西来做到这一点

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

使用条件 API 你可以这样做

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