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

查看:261
本文介绍了如何返回Map< Key,Value>与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 使用选择新地图

    code>语法在HQL中获取 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.

    解决方案

    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&lt; Key,Value&gt;与HQL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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