我正在尝试通过命名约定(不使用@Query)来删除JPA存储库。
关键是我有一个@EmbeddedId
,所以repo标题看起来像
public interface MatchPronosticsRepository extends JpaRepository<MyClass, MyID>
所以默认情况下我有一个方法delete(MyID id)
,但我需要像delete(Iterable<? extends MyID>)
这样的东西,所以我可以一次性杀死一些对象。关于如何解决它的任何想法?没找到它
谢谢!
我尝试添加void deleteByMatchPronosticPk (Iterable<? extends MatchPronosticPK> ids);
但结果很奇怪。它似乎做了一个Select会很好,但使用3个字段和3个值,但只有2个占位符:S
Hibernate:
select
matchprono0_.match_id as match3_4_,
matchprono0_.isprimary as isprimar1_4_,
matchprono0_.user_id as user4_4_,
matchprono0_.match_result as match2_4_
from
match_pronostics matchprono0_
where
(
matchprono0_.match_id, matchprono0_.isprimary, matchprono0_.user_id
)=(
? , ?
)
2015-06-03 21:41:18,149 TRACE: org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [BIGINT] - 58
2015-06-03 21:41:18,149 TRACE: org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [BOOLEAN] - true
2015-06-03 21:41:18,149 TRACE: org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [3] as [BIGINT] - 26
2015-06-03 21:41:18,149 WARN : org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: 22023
2015-06-03 21:41:18,149 ERROR: org.hibernate.engine.jdbc.spi.SqlExceptionHelper - The column index is out of range: 3, number of columns: 2.
需要继续使用其他一些东西......由于删除是在尝试删除之前在内部执行选择,这不会比我试图实现的原始代码更多地损害性能
List<MatchPronostic> pronosticsToDelete = matchPronosticsRepository.findAll(ids);
matchPronosticsRepository.deleteInBatch(pronosticsToDelete);
答案 0 :(得分:0)
不是@Query,而是如here
所述为您的存储库设置自定义方法所以基本上,我建议这样的事情:
public void myCustomDel(Iterable<MyID> ids) {
delete(findAll(ids));
}