Ser*_*sky 5 java spring hibernate spring-data spring-data-jpa
所以我大部分时间都在使用 Spring Data Repositories。但我遇到了一个用例,我无法使用 Spring 存储库来检索我需要返回给客户端的实体。所以我的类ResourceEntity是一个 Spring 数据实体。我想将这个实体作为ResourceProjection接口返回。
@Getter
@Setter
@NoArgsConstructor
@Entity
public class ResourceEntity{
private Long id;
private String name;
private String anotherFieldThatIsNotInTheProjection;
}
public interface ResourceProjection {
Long getId();
String getName();
}
Run Code Online (Sandbox Code Playgroud)
通常对于 Spring 存储库,我会定义类似的内容:
public interface ResourceRepository extends PagingAndSortingRepository<ResourceEntity, Long> {
Optional<ResourceProjection> getById(Long id);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我无法使用 Spring Data 生成的“自动代理”来自动实现实体数据的投影。
所以我的问题是:有没有办法“手动”将实体转换为投影?
我想到的另一个解决方案是返回实体并使用 @JsonIgnore 之类的 Jackson 注释来防止返回一些数据,但这对于我的代码编写方式来说并不是最佳的。
否则,我始终可以创建一个 DTO 类来填充来自实体的数据。但由于我已经为其他目的创建了投影,所以我想避免创建第二个“DTO”。
小智 9
您可以通过以下方式以编程方式进行投影:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3506 次 |
| 最近记录: |