Я использую 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
}
Теперь я хотел бы предоставить DTO в API сParseError
свойств, но не со всей сущностью 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?