5

JPA で Micronaut Data を使用しており、2 つのエンティティがあります。最初のものは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
}

2番目のものは、次のもの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
}

ParseErrorここで、API で 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()。プロパティのレシピ ID がエンティティに存在しません: 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()。タイプ [RecipeDto] のプロパティ [レシピ] は、エンティティで宣言された同等のプロパティと互換性がありません: ParseError

Micronaut Data は、DTO プロジェクションによってこのユース ケースを処理できますか? そうでない場合、Micronaut Data でそれを解決する方法はありますか?

4

1 に答える 1