Reputation: 515
I am trying to create a custom deleteBy method query in my repository. It seems that instead of deleting, hibernate is making a select statement.
public interface ContactRepository extends JpaRepository<Contact, Integer> {
Integer deleteByEmailAddress(String emailAddress);
//and this one works
Contact findContactByName(String name);
}
and here is what Hibernate is trying to do:
Hibernate: select contact0_.id as id1_2_, contact0_.emailAddress as >emailAdd2_2_, contact0_.name as name3_2_ from Contact contact0_ where >contact0_.emailAddress=?
What am I missing? Do I have to make a special configuration in order to make delete work?
Upvotes: 33
Views: 58526
Reputation: 19
Try to move the delete Query call to an service class exclusive for it:
@FunctionalInterface
public interface DeleteService {
public int deleteIfExists(Date fechaProceso);
}
and implement it in DeleteServiceImpl.java for example
Upvotes: -3
Reputation: 199
In modern versions of Spring Data JPA (>=1.7.x) query derivation for delete, remove and count operations is accessible.
Spring Data: "delete by" is supported?
Upvotes: 3
Reputation: 11643
Is the delete not working or not working as how you'd expect? Typically an entity has to be managed before it can be deleted, so a JPA provider (hibernate in your case) will load (the query you see) the entity first, then issue the delete.
If you're only seeing the query, but no corresponding delete, then some possibilities are:
deleteByEmailAddress
is transactionalNote: you can avoid the select when removing an entity using a modifying query delete, example below:
// NOTE: you have return void
@Modifying
@Transactional
@Query(value="delete from Contact c where c.emailAddress = ?1")
void deleteByEmailAddress(String emailAddress)
Upvotes: 50