问题描述
我有一张桌子
权限:
- id
- 姓名
- 描述
我现在在做什么是进行一个返回权限对象的查询,然后以编程方式将值放入地图
1- 但我想知道是否可以制作 HQL(如果不可能,则使用本机 sql)来选择 permission_id、permission_name 并在地图中返回它们.
2- 是否可以以一对多的关系返回映射而不是以下列表或集合
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)@JoinTable(name = "perm_cat_map", joinColumns = { @JoinColumn(name = "perm_cat_id") }, inverseJoinColumns = { @JoinColumn(name = "permission_id") })私人列表<权限>权限 = 新的 ArrayList(0);
是否可能有类似的东西:
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)@JoinTable(name = "perm_cat_map", joinColumns = { @JoinColumn(name = "perm_cat_id") }, inverseJoinColumns = { @JoinColumn(name = "permission_id") })私人地图权限 = 新的 ArrayList(0);
其中两个字符串分别是permission_id、permission_name.
使用 HQL 中的
select new map
语法来获取Map
中每一行的结果.看看下面的问题,它解决了这个问题:How to fetch hibernate query result as associative array of list or hashmap.例如,以下 HQL:select new map(perm.id as pid, perm.name as pname) from Permission perm
将返回MapList
/code>s,每个都有键pid"和pname".无法将关联映射到
Map
.可以使用 将 Map 的键映射到列@MapKeyColumn
关联中的注解.请参阅此问题,该问题也解决了该问题,例如:JPA 2.0 Hibernate @OneToMany + @MapKeyJoinColumn.这里是另一个例子.
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)@JoinTable(name = "perm_cat_map",joinColumns = { @JoinColumn(name = "perm_cat_id") },inverseJoinColumns = { @JoinColumn(name = "permission_id") })@MapKeyColumn(name="permission_id")私有映射权限=新的哈希映射(0);
i have a table
Permission:
- id
- name
- desc
what i am doing right nowis to make a query that returns a permission object then put the values in the map programmatically
1- But i was wondering if it's possible to make an HQL (or native sql if not possible) to select the permission_id, permission_name and return them in a map.
2- is it possible to return map in one to many relationship instead of following list or set
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "perm_cat_map", joinColumns = { @JoinColumn(name = "perm_cat_id") }, inverseJoinColumns = { @JoinColumn(name = "permission_id") })
private List<Permission> permissions = new ArrayList<Permission>(0);
is it possible to have something like:
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "perm_cat_map", joinColumns = { @JoinColumn(name = "perm_cat_id") }, inverseJoinColumns = { @JoinColumn(name = "permission_id") })
private Map<String,String> permissions = new ArrayList<String,String>(0);
where the two strings are permission_id, permission_name.
Use the
select new map
syntax in HQL to fetch the results of each row in aMap
. Take a look at the following question, that addresses the issue: How to fetch hibernate query result as associative array of list or hashmap.For instance, the following HQL:select new map(perm.id as pid, perm.name as pname) from Permission perm
will return aList
ofMap
s, each one with keys "pid" and "pname".It is not possible to map an association to a
Map<String, String>
. It is possible to map the key of the Map to a column with the@MapKeyColumn
annotation in the association. See this question, that also addresses the issue, for an example: JPA 2.0 Hibernate @OneToMany + @MapKeyJoinColumn. Here is another example.
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "perm_cat_map",
joinColumns = { @JoinColumn(name = "perm_cat_id") },
inverseJoinColumns = { @JoinColumn(name = "permission_id") })
@MapKeyColumn(name="permission_id")
private Map<String, Permission> permissions = new HashMap<String,Permission>(0);
这篇关于如何返回 Map<Key, Value>与 HQL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!