未找到本机 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
子类型,并使用注入的 EntityManager
或 JpaRepositoryOperations
执行自定义查询,同时保留默认的拦截方法:
@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 并调用自定义查询方法。
我正在将一个 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
子类型,并使用注入的 EntityManager
或 JpaRepositoryOperations
执行自定义查询,同时保留默认的拦截方法:
@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 并调用自定义查询方法。