如何返回 Map<Key, Value>与 HQL [英] how to return Map&lt;Key, Value&gt; with HQL

查看:32
本文介绍了如何返回 Map<Key, Value>与 HQL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一张桌子

权限:

  • id
  • 姓名
  • 描述

我现在在做什么是进行一个返回权限对象的查询,然后以编程方式将值放入地图

1- 但我想知道是否可以制作 HQL(如果不可能,则使用本机 sql)来选择 permission_idpermission_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_idpermission_name.

解决方案

  1. 使用 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 将返回 Map<的 List/code>s,每个都有键pid"和pname".

  2. 无法将关联映射到 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 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.

解决方案

  1. Use the select new map syntax in HQL to fetch the results of each row in a Map. 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 a List of Maps, each one with keys "pid" and "pname".

  2. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆