gpt4 book ai didi

java - 有人能告诉我在我的案例中 spring-data 投影的真正原因吗?

转载 作者:行者123 更新时间:2023-12-02 07:44:23 55 4
gpt4 key购买 nike

案例是:我有一个存储库和两种方法,其中之一如下所示:

//There is no warning about: Activity domain type or valid projection interface expected here...
@Query("select distinct a.creatorId from Activity a")
Optional<List<String>> findAllCreatorIds();

第二种方法如下:

//There i have warning about: Activity domain type or valid projection interface expected here
@Query("select distinct a.creatorId from Activity a join a.categories c where c.name in ?1")
Optional<List<String>> findAllCreatorIdsByCategoryNames(Set<String> categoryNames);

它看起来可行,测试已通过,生成的查询如下:

SELECT DISTINCT activity0_.created_by AS col_0_0_
FROM activities activity0_
INNER JOIN category_item categories1_ ON
activity0_.id=categories1_.activity_id
INNER JOIN categories category2_ ON
categories1_.category_id=category2_.id
WHERE category2_.name IN (?)

我已进行更改以使用投影界面。简单的投影界面为:

public interface CreatorIdProjection {
String getCreatorId();
}

查询已更改:

@Query("select a from Activity a join a.categories c where c.name in ?1")
Optional<List<CreatorIdProjection>> findAllCreatorIdsByCategoryNames(Set<String> categoryNames);

也有效。这是生成的查询:

SELECT activity0_.id AS id1_0_,
activity0_.price AS price2_0_,
activity0_.created_by AS created_3_0_,
activity0_.expiration_date AS expirati4_0_,
activity0_.insertts AS insertts5_0_,
activity0_.name AS name6_0_,
activity0_.start_date AS start_da7_0_,
activity0_.updatets AS updatets8_0_
FROM activities activity0_
INNER JOIN category_item categories1_ ON activity0_.id=categories1_.activity_id
INNER JOIN categories category2_ ON categories1_.category_id=category2_.id
WHERE category2_.name IN (?)

我有几个与此案例相关的问题:

  1. 为什么第一种方法没有警告?

  2. 为什么我们使用的时候SELECT后面的查询有很多字段投影? (更准确地说 - 为什么我们不能使用“select来自 Activity a 的 a.creatorId...")

  3. 警告“...域类型或有效”的原因是什么?此处预期的投影接口(interface)”如果结果我们有一个查询查询表数据而不是我们需要的数据。

最佳答案

出现警告是因为您在方法名称中使用了“By”,这会触发 Spring Data 使用(神奇的)查询方法。

删除“By”或将其替换为“Using”或其他内容,警告就会消失。

另请参阅https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.details

关于java - 有人能告诉我在我的案例中 spring-data 投影的真正原因吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44131207/

55 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com