一尘不染

如何返回地图 与HQL

hibernate

我有一张桌子

权限

  • 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") })
    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") })
        private Map<String,String> permissions = new ArrayList<String,String>(0);

其中两个字符串分别是 permission_idpermission_name


阅读 317

收藏
2020-06-20

共1个答案

一尘不染

  1. 使用select new mapHQL中的语法获取中的每一行的结果Map。让我们看一下解决该问题的以下问题:如何以list或hashmap的关联数组获取hibernate查询结果。例如,下面的HQL:select new map(perm.id as pid, perm.name as pname) from Permission perm将返回ListMapS,每一个与键“PID”和“PNAME”。

  2. 无法将关联映射到Map<String, String>。可以将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”)
    private Map permissions = new HashMap(0);

2020-06-20