Java 如何使Hibernate Spring存储库返回HashMap

Java 如何使Hibernate Spring存储库返回HashMap,java,spring,hibernate,Java,Spring,Hibernate,通常,我们将查询编写为 @Query("SELECT a FROM Foo a WHERE a.someId = :id") Map<Long, Foo> findAllBySomeId(Long id) 你看了吗 此外,在本次尝试中,您仍在寻找以下列表: @Query(“从Foo a中选择新映射(a.someId,a),其中a.someId=:id”) 列出findAllBySomeIdAsMap(长id); 您是否尝试更改签名?我已经解决了一个类似的映射问题(我希望加载静态数

通常,我们将查询编写为

@Query("SELECT a FROM Foo a WHERE a.someId = :id")
Map<Long, Foo> findAllBySomeId(Long id)
你看了吗

此外,在本次尝试中,您仍在寻找以下列表:

@Query(“从Foo a中选择新映射(a.someId,a),其中a.someId=:id”)
列出findAllBySomeIdAsMap(长id);

您是否尝试更改签名?

我已经解决了一个类似的映射问题(我希望加载静态数据表中的每个值,因为我知道在一个过程中需要它们)。 这就是我对这个问题的解决方案(当然没有“where a.someId=id”)。 它使用findAll(),我相信它可以使用任何其他具有id限制的“find”方法

public interface FooRepository extends JpaRepository<Foo, String> {

    // convenience method to provide a 'code -> object' mapping of all Foos
    default Map<String, Foo> mapAll() {
        return findAll().stream().collect(Collectors.toMap(o -> o.getCode(), o -> o));
    }
}
公共接口FooRepository扩展了JpaRepository{
//提供所有FOO的“代码->对象”映射的方便方法
默认映射映射所有(){
返回findAll().stream().collect(Collectors.toMap(o->o.getCode(),o->o));
}
}

在使用具有1-many关系的注释时,可能的重复可能会有一些不同。但我需要的是使用相同的(在单个中)table@Paul你找到获取hashmap的方法了吗?我也需要这样做。可能重复的可能重复的抱歉这是我的打字错误。签名是Hashmap。我会编辑这篇文章。但问题仍然是sameOK。你看过那篇文章了吗?如果是这样,对你的情况有帮助吗?谢谢你的回复。我确实看过那篇文章。在post中,查询将尝试检查并返回结果,但仅返回映射中存在的值。但是我需要的是一种方法来指定“column-1”是您的键,而Value是该性能的实体,我希望您不要在生产环境中运行此代码?以什么方式?加载整个表只需调用一次,DB访问和实体映射是该过程中最重要的部分。如果您担心每次调用该方法时都会命中DB(这将是该方法的次优使用),请向其添加@Cacheable注释。错误和错误原因:如果
o.getCode()
不是不同
o
对象的唯一值,则该代码将在java中崩溃,您不会在任何地方处理非重复的
code
值,也不会处理Java异常。您正在用Java做这项工作,可以用上面OP建议的方法在数据库中更高效地完成这项工作。不应在
t extends JpaRepository
上使用Cacheable,而应在
t服务上使用Cacheable。你的代码依赖于你的未记录的合同,这可能对你有用,但对其他人来说都不好。如果我建议了一个简单的解决方案,并做了一些假设,我很抱歉。我假设读者会理解在特定属性上为集合编制索引的含义(在我的示例中是getCode())需要一个唯一的值->对象映射。一个程序员会明白,你不会故意做一个完整的表扫描&加载100毫秒/s
0=someId
1=Foo
@Query("SELECT new map (a.someId, a) FROM Foo a WHERE a.someId = :id")
List<Foo> findAllBySomeIdAsMap(Long id);
public interface FooRepository extends JpaRepository<Foo, String> {

    // convenience method to provide a 'code -> object' mapping of all Foos
    default Map<String, Foo> mapAll() {
        return findAll().stream().collect(Collectors.toMap(o -> o.getCode(), o -> o));
    }
}