如何返回Map< Key,Value>与HQL [英] how to return Map<Key, Value> with HQL
问题描述
我有一张表
权限:
>我现在正在做什么
是做一个查询,返回一个权限对象,然后把这些值以编程的方式放在地图中
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)})
private List< Permission> permissions = new ArrayList< Permission>(0);
有可能有这样的东西:
@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
@JoinTable(name =perm_cat_map,joinColumns = {@JoinColumn(name =perm_cat_id )},inverseJoinColumns = {@JoinColumn(name =permission_id)})
私人地图< String,String> permissions = new ArrayList< String,String>(0);
其中两个字符串是 permission_id , permission_name 使用选择新地图
Map
中每行的结果。看看下面的问题,它解决了这个问题:如何将hibernate查询结果作为列表或散列表的关联数组来获取 。 例如,以下HQL:
从Permission perm
选择新的映射(perm.id作为pid,perm.name作为pname)将返回一个 Map
的列表
,每一个都带有键pid和pname。 无法将关联映射到 Map< String,String>
。可以使用关联中的 @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)
private Map< String,Permission> permissions = new HashMap< String,Permission>(0);
i have a table
Permission:
- id
- name
- desc
what i am doing right now is 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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!