I'm am currently trying to use a Spring Data repository to delete some of my entities. The delete call works without any exceptions/error messages, but the entity is not deleted afterwards.
Those are my entities:
public class Board implements Serializable {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(columnDefinition = "BINARY(16)")
private UUID uuid;
@OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL, orphanRemoval = true, mappedBy = "board")
private List<Post> posts = new ArrayList<Post>();
}
and
public class Post implements Serializable {
@Id
@GeneratedValue
private long id;
@ManyToOne(optional = false)
@JoinColumn(name="board_uuid", updatable = false, nullable = false)
@JsonBackReference
private Board board;
}
The repository is as simple as it can be:
@Repository
public interface PostRepository extends CrudRepository<Post, Long> {
}
The delete call is something like
postRepository.delete(50);
Any ideas why this change doesn't reflect in the database?
Edit 1:
I found a workaround, but I still don't understand what the real problem is. It "works" if I delete the Post like this (there are a couple of exceptions because of constraint violations, but still the Post gets deleted):
post.setBoard(null);
postRepo.delete(post);
Edit 2:
When I have a look at the SQL statements executed I can see that hibernate is not even trying to delete. The only thing that happens are those two select statements:
Hibernate: select post0_.id as id1_1_0_, post0_.board_uuid as board_uu6_1_0_, post0_.content as content2_1_0_, post0_.x as x3_1_0_, post0_.y as y4_1_0_, post0_.z as z5_1_0_, board1_.uuid as uuid1_0_1_ from Post post0_ left outer join Board board1_ on post0_.board_uuid=board1_.uuid where post0_.id=?
Hibernate: select posts0_.board_uuid as board_uu6_0_0_, posts0_.id as id1_1_0_, posts0_.id as id1_1_1_, posts0_.board_uuid as board_uu6_1_1_, posts0_.content as content2_1_1_, posts0_.x as x3_1_1_, posts0_.y as y4_1_1_, posts0_.z as z5_1_1_ from Post posts0_ where posts0_.board_uuid=?
Edit 3
Turns out the cascade=CascadeType.ALL on posts seems to be the problem. Without it the delete works fine (but I am missing the cascade of changes to posts now)
question from:https://stackoverflow.com/questions/29172313/spring-data-repository-does-not-delete-manytoone-entity