gpt4 book ai didi

jpa - findAll 与 Projections 中的 findAll 和 CrudRepository 发生冲突

转载 作者:行者123 更新时间:2023-12-02 20:22:42 27 4
gpt4 key购买 nike

登录

@ApiModel
@Entity
public class Login {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;

private LocalDateTime loginDateTime;

/** Other fields ***/
}

仅登录日期

interface LoginDateOnly {

@Value("#{target.loginDateTime.toLocalDate()}")
LocalDate getDateFromLoginDateTime();

}

登录存储库

@RepositoryRestResource(collectionResourceRel = "login", path = "login")
public interface LoginRepository extends PagingAndSortingRepository<Login, Long> {

Collection<LoginDateOnly> findAll();

/** Other query methods **/
}

我只想获取我的所有登录记录,并使用 http: 选择/投影我的 loginDateTimeLocalDate 部分//主机/api/登录。但目前我遇到了与 CrudRepository 的 findAll() 的冲突。如何使用投影尽可能地解决这个问题。我将 @Query 和 @NamedQuery 作为我最后的手段。

最佳答案

findAll 方法签名是:

List<T> findAll();

如果您想覆盖它,则不能使用其他签名。

要获取投影列表,您只需为此定义另一种方法,例如:

Collection<LoginDateOnly> findAllBy();

但是正如我所看到的,您正在使用 Spring Data REST,因此在这种情况下您不需要定义新方法。您应该首先将注释 @Projection 添加到您的投影中:

@Projection(name = "loginDateOnly", types = Login.class)
interface LoginDateOnly {
//...
}

然后在请求 URL 中使用它的名称:

GET http://host/api/login?projection=loginDateOnly

在文档中查看更多信息:Projections and Excerpts

关于jpa - findAll 与 Projections 中的 findAll 和 CrudRepository 发生冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50950806/

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