执行自定义的本机查询时无法提取ResultSet

时间:2018-12-11 16:25:49

标签: java spring spring-data-jpa

我正在使用Spring Data JPA,我想封装一个执行特定SQL的方法。我在以下问题上做到了:

some_list[3] == 4

但是,我收到以下消息作为结果:

@Component
public interface UserRepository extends CrudRepository<User, String> {
  @Query(
      value = "delete from User u where u.alias = :alias",
      nativeQuery = true
      )
  void deleteUserByAlias(@Param("alias") String alias);
}

那么问题出在哪里?

4 个答案:

答案 0 :(得分:0)

您的课程应该是这样的:

@Component
public interface UserRepository extends CrudRepository<User, String> {

  @Query(
      value = "delete from User u where u.alias = :alias",
      nativeQuery = true
      )
  @Modifying
  void deleteUserByAlias(@Param("alias") String alias);
}

您会看到我正在使用@Modifying,有关更多信息,请查看此https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.modifying-queries

答案 1 :(得分:0)

没有直接回答我的问题,但是找到了一种解决方法,该方法可基于其他属性而非ID删除记录。
根据{{​​3}}的答复,

  

支持使用给定方法名称派生删除查询   从Spring Data JPA的1.6.0.RC1版本开始。关键字   支持删除和删除。作为返回值,可以选择   在编号或已删除实体的列表之间。

     

长removeByLastname(字符串姓氏);

     

列表deleteByLastname(String lastname);

我会写

  @Transactional
  void deleteByAlias(String alias);
UserRepository

达到目标。

我将不接受此答案,并希望进一步作出贡献。

答案 2 :(得分:0)

如果您的方法已经是Transactional,那么也请在存储库方法上使用transactional

@Component
    public interface UserRepository extends CrudRepository<User, String> {

      @Query(
          value = "delete from User u where u.alias = :alias",
          nativeQuery = true
          )
      @Modifying
      @Transactional
      void deleteUserByAlias(@Param("alias") String alias);
    }

答案 3 :(得分:0)

@Repository
@Transactional
interface OrderRepository: JpaRepository<Order, OrderIdentity>{

   @Query("SELECT * FROM orders WHERE id=:id",nativeQuery = true)
   fun findBy(@Param("id") id: String): List<OrderEvent>

   @Modifying
   @Query("DELETE FROM orders WHERE id=:id", nativeQuery = true)
   fun deleteFor(@Param("id") id: String)

}

通过在方法上使用@Modifying 和在 Repository 上使用@Transactional 错误将被解决。