【发布时间】:2020-01-28 08:50:29
【问题描述】:
我将 Micronaut Data 与 JPA 一起使用,并且有两个实体。第一个是Recipe:
@Entity
public class Recipe {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
@ManyToOne
private Category category;
@OneToMany(mappedBy = "recipe", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
private Set<Step> steps;
// + other fields, getters and setters
}
第二个是ParseError,指的是Recipe:
@Entity
@Table(name = "parse_error")
public class ParseError implements Serializable {
@Id
@ManyToOne(fetch = FetchType.LAZY)
private Recipe recipe;
@Id
@Enumerated(EnumType.ORDINAL)
@Column(name = "problem_area")
private ProblemArea problemArea;
private String message;
// + other fields, getters and setters
}
现在我想在 API 中提供具有 ParseError 属性的 DTO,但不提供整个 Recipe 实体,因为它包含在这种情况下不需要的 ManyToOne 和 OneToMany 关系。所以我为此创建了投影 DTO:
@Introspected
public class ParseErrorDto {
private Integer recipeId;
private String recipeName;
private ParseError.ProblemArea problemArea;
private String message;
// + getters and setters
}
并将listAll()方法添加到ParseErrorRepository中:
@Repository
public interface ParseErrorRepository extends CrudRepository<ParseError, Integer> {
List<ParseErrorDto> listAll();
}
但似乎 Micronaut Data 无法从嵌套实体投射属性,或者我错过了 DTO 或存储库方法中的某些内容:
ParseErrorRepository.java:22:错误:无法实现存储库 方法:ParseErrorRepository.listAll()。属性 recipeId 不是 存在于实体中:ParseError
我也尝试创建RecipeDto:
@Introspected
public class RecipeDto {
private Integer id;
private String name;
// + getters and setters
}
并相应更新ParseErrorDto:
@Introspected
public class ParseErrorDto {
private RecipeDto recipe;
private ParseError.ProblemArea problemArea;
private String message;
// + getters and setters
}
再次没有成功:
ParseErrorRepository.java:22:错误:无法实现存储库 方法:ParseErrorRepository.listAll()。类型的属性 [recipe] [RecipeDto] 与中声明的等效属性不兼容 实体:ParseError
Micronaut Data 是否能够通过 DTO 投影处理此用例?如果没有,还有其他方法可以在 Micronaut Data 中解决吗?
【问题讨论】:
-
@SaschaFrinken 这是一个不同的问题,但我专门为这种情况创建了一个新问题:github.com/micronaut-projects/micronaut-data/issues/184
标签: java jpa micronaut micronaut-data