相关疑难解决方法(0)

如何使用HQL返回Map <Key,Value>

我有一张桌子

许可:

  • ID
  • 名称
  • 降序

我现在正在做的是创建一个返回权限对象的查询,然后以编程方式将值放在地图中

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);
Run Code Online (Sandbox Code Playgroud)

有可能有类似的东西:

@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);
Run Code Online (Sandbox Code Playgroud)

其中两个字符串是permission_id,permission_name.

hibernate hql hibernate-mapping

34
推荐指数
5
解决办法
8万
查看次数

JPA可以将结果作为地图返回吗?

我们目前基于命名查询返回的两个字段手动构建映射,因为JPA仅提供getResultList().

@NamedQuery{name="myQuery",query="select c.name, c.number from Client c"}

HashMap<Long,String> myMap = new HashMap<Long,String>();

for(Client c: em.createNamedQuery("myQuery").getResultList() ){
     myMap.put(c.getNumber, c.getName);
}
Run Code Online (Sandbox Code Playgroud)

但是我觉得自定义映射器或者类似物会更高效,因为这个列表很容易就会产生30,000多个结果.

任何想法,无需手动迭代即可构建Map.

(我使用的是OpenJPA,而不是休眠)

jpa resultset map openjpa

32
推荐指数
5
解决办法
7万
查看次数

如何使用Spring Data JPA查询Map值?

所以我的数据库模型是这样的:我有Stores,每个Store都有一个本地化的名称.所以我选择将本地化名称表示为Map:

public class Store {
   private Map<Locale,LocalizedValue> name;
}
Run Code Online (Sandbox Code Playgroud)

你可以看到这是一个地图<Locale, LocalizedValue>,其中LocalizedValue是这样一类:

@Embeddable
public class LocalizedValue {

   @Column(name = "value")
   private String value;
}
Run Code Online (Sandbox Code Playgroud)

这一切都很棒.但是我遇到了一个问题,我想查询我的Spring Data JPA存储库并查找具有给定英文名称的所有商店.所以我的存储库方法如下所示:

Store findByName(Map.Entry<Locale, LocalizedValue> name);
Run Code Online (Sandbox Code Playgroud)

但它抛出了这个异常:

 2014-10-07 23:49:55,862 [qtp354231028-165] ERROR: Parameter value [en=Some Value] did not match expected type [com.test.LocalizedValue(n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [en=Some Value] did not match expected type [com.test.LocalizedValue (n/a)]
org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [en=Some Value] did not match expected type …
Run Code Online (Sandbox Code Playgroud)

java spring jpa spring-data spring-data-jpa

6
推荐指数
1
解决办法
2万
查看次数