gpt4 book ai didi

java - 手动将@Entity 转换为投影界面

转载 作者:行者123 更新时间:2023-12-05 01:12:46 25 4
gpt4 key购买 nike

所以我大部分时间都在使用 Spring Data Repositories。但是我遇到了一个用例,我无法使用我的 Spring 存储库来检索我需要返回给客户端的实体。所以我有我的类 ResourceEntity,它是一个 Spring 数据实体。我想将此实体作为 ResourceProjection 接口(interface)返回。

@Getter
@Setter
@NoArgsConstructor
@Entity
public class ResourceEntity{
private Long id;
private String name;
private String anotherFieldThatIsNotInTheProjection;
}

public interface ResourceProjection {
Long getId();
String getName();
}

通常使用 Spring 存储库,我会定义类似的东西:

public interface ResourceRepository extends PagingAndSortingRepository<ResourceEntity, Long> {
Optional<ResourceProjection> getById(Long id);
}

在这种情况下,我无法使用 Spring Data 生成的“自动代理”来自动实现我对实体数据的投影。

所以我的问题是:有没有办法“手动”将实体转换为投影?

我想到的另一个解决方案是返回实体并使用像 @JsonIgnore 这样的 Jackson 注释来防止我的一些数据被返回,但这不是我编写代码的最佳方式。

否则我总是可以创建一个 DTO 类来填充来自实体的数据。但由于我已经为其他目的创建了我的投影,我想避免创建第二个“DTO”。

最佳答案

您可以通过这种方式以编程方式进行投影:

import org.springframework.data.projection.ProjectionFactory;
import org.springframework.data.projection.SpelAwareProxyProjectionFactory;

//...
resourceEntity = //find resource
ProjectionFactory pf = new SpelAwareProxyProjectionFactory();
ResourceProjection rp = pf.createProjection(ResourceProjection.class, resourceEntity)

关于java - 手动将@Entity 转换为投影界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61524589/

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