未找到本机 micronaut 数据插入查询的可能实现

No possible implementation found for native micronaut data insert queries

我正在将一个 spring 引导应用程序迁移到 micronaut,我偶然发现了 micronaut 数据的问题。 当使用在 spring 引导数据中工作的本机查询时,我在尝试将一些数据插入关联 table.

的查询中遇到编译错误
Unable to implement Repository method: MyEntityRepository.insertQueryExample(int id, String name). No possible implementations found.

其他本机查询(选择、删除)没有问题,生成的方法也是如此。 使用上述方法的回购协议如下所示:

public interface MyEntityRepository extends CrudRepository<MyEntity, Integer> {

    @Query(value = "insert into my_entity_my_entity2 (id, id2)" +
            " values (:id, (select me2.id from my_entity2 os where me2.name = :name))", nativeQuery = true)
    void insertQueryExample(int id, String name);
}

my_entity_my_entity2 没有实体 class,但在 spring 中有效,所以我认为这不是问题。

在此先感谢您的帮助。

There's no entity class for my_entity_my_entity2 but that worked in spring so I don't think that's a problem.

确实是这个问题。

All io.micronaut.data.repository.GenericRepository 需要一个相应的实体类型(必须自省,它是 Micronaut Data JPA 还是 Micronaut Data JDBC实施。

剩下的解决方案是实现自定义 JpaRepository 子类型,并使用注入的 EntityManagerJpaRepositoryOperations 执行自定义查询,同时保留默认的拦截方法:

@Repository
public abstract class MyEntityRepository implements CrudRepository < MyEntity, Integer> {

    @Inject
    JpaRepositoryOperations operations;

    @Transactional
    void insertQueryExample(int id, String name) {
        operations.getCurrentEntityManager()
                .createNativeQuery("insert into my_entity_my_entity2 (id, id2)" +
                        " values (:id, (select os.id from my_entity2 os where os.name = :name))")
                .setParameter("id", id)
                .setParameter("name", name)
                .executeUpdate();
    }
}

然后您可以注入 MyEntityRepository bean 并调用自定义查询方法。