我有一张桌子
权限 :
我现在正在做的是使查询返回一个权限对象,然后以编程方式将值放入地图中
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") }) private Map<String,String> permissions = new ArrayList<String,String>(0);
其中两个字符串分别是 permission_id 和 permission_name 。
使用select new mapHQL中的语法获取中的每一行的结果Map。让我们看一下解决该问题的以下问题:如何以list或hashmap的关联数组获取hibernate查询结果。例如,下面的HQL:select new map(perm.id as pid, perm.name as pname) from Permission perm将返回List的MapS,每一个与键“PID”和“PNAME”。
select new map
Map
select new map(perm.id as pid, perm.name as pname) from Permission perm
List
无法将关联映射到Map<String, String>。可以将Map的键映射到@MapKeyColumn关联中带有注释的列。例如,请参阅此问题,该问题也解决了该问题:JPA 2.0 Hibernate @OneToMany+@MapKeyJoinColumn。这是另一个例子。
Map<String, String>
@MapKeyColumn
@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);