如何使用休眠对映射对象进行特定查询
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_autorization 和 authorization 个对象。
对于每个 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();
menu menu_autorization authorization
---------- ----------------------- -----------------------
|id|title| |id|menu|authorization| |id|authorization|info|
---------- ----------------------- -----------------------
| | | |
|---------------------| |----------------|
我用 Hibernate 映射了这个数据库;当我从数据库中得到一个 Menu 对象时,我也正确地得到了 menu_autorization 和 authorization 个对象。
对于每个 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();