【问题标题】:How to make a specific query on mapped objects with hibernate如何使用休眠对映射对象进行特定查询
【发布时间】:2015-02-05 11:17:40
【问题描述】:
  menu              menu_autorization                authorization
----------        -----------------------        -----------------------
|id|title|        |id|menu|authorization|        |id|authorization|info|
----------        -----------------------        -----------------------
  |                     |        |                |
  |---------------------|        |----------------|

我用 Hibernate 映射了这个数据库;当我从数据库中获取 Menu 对象时,我还正确地获取了 menu_autorizationauthorization 对象。

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

到目前为止,我编写的查询使我获得了数据库中的所有菜单对象;我想做的是编写一个查询,让我获得一个具有特定 menu_autorizationmenu 对象。

我该怎么做,因为我在 menu 表中没有 authorization 字段? 也许我可以使用 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;
...

【问题讨论】:

  • Java 中menumenu_autorization 之间的关系是如何创建的?向我们展示您的 JPA 实体类的相关部分。

标签: java hibernate hibernate-mapping hibernate-criteria


【解决方案1】:

你可以用 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();

【讨论】:

    猜你喜欢
    • 2013-06-02
    • 2014-04-27
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多