リポジトリでカスタムdeleteByメソッドクエリを作成しようとしています。 hibernateは削除する代わりに、selectステートメントを作成しているようです。
public interface ContactRepository extends JpaRepository<Contact, Integer> {
Integer deleteByEmailAddress(String emailAddress);
//and this one works
Contact findContactByName(String name);
}
そして、Hibernateがやろうとしていることは次のとおりです。
Hibernate:contact0_.idをid1_2_として、contact0_.emailAddressを> emailAdd2_2_として、contact0_.nameをname3_2_として、contact contact0_から選択します。ここで、> contact0_.emailAddress =?
私は何が欠けていますか?削除を機能させるために特別な構成を行う必要がありますか?
削除が機能しない、または期待どおりに機能しない?通常、エンティティは削除する前に管理する必要があるため、JPAプロバイダー(この場合は休止状態)が最初にエンティティを読み込み(表示されるクエリ)、次に削除を発行します。
クエリのみが表示され、対応する削除が表示されない場合、いくつかの可能性があります。
deleteByEmailAddress
を呼び出しているものがトランザクション対応であることを確認するだけではありません注:変更クエリ削除を使用してエンティティを削除する場合、選択を回避できます。以下に例を示します。
// NOTE: you have return void
@Modifying
@Transactional
@Query(value="delete from Contact c where c.emailAddress = ?1")
void deleteByEmailAddress(String emailAddress)
Spring Data JPA(> = 1.7.x)の最新バージョンでは、削除、削除、およびカウント操作のクエリ派生にアクセスできます。
クエリの削除呼び出しを、それ専用のサービスクラスに移動してみてください。
@FunctionalInterface
public interface DeleteService {
public int deleteIfExists(Date fechaProceso);
}
そして、例えばDeleteServiceImpl.Javaに実装します