Spring Data JPA/Hibernate OneToMany remove ManyToOne Child -
i experiencing following problem:
i have 3 pojo's
- artist
- album
- track
with artist having onetomany relationship album, , album having onetomany relationship track.
artist.class
@entity public class artist { @id @generatedvalue @column(name = "artist_id") private long artist_id; @column(name = "artist_name", nullable = false, length = 32) private string artist_name; @column(name = "artist_bio", nullable = false, length = 255) private string artist_bio; @lob @basic(fetch = fetchtype.eager) @column(name = "artist_avatar") private byte[] artist_avatar; @onetomany(fetch = fetchtype.eager, cascade = cascadetype.all, mappedby = "artist", orphanremoval = true) private list<album> albumlist;
album.class
@entity public class album { @id @generatedvalue @column(name = "album_id") private long album_id; @manytoone(fetch = fetchtype.eager) @joincolumn(name = "artist_id", nullable = false) private artist artist; @onetomany(fetch = fetchtype.eager, cascade = cascadetype.all, mappedby = "album", orphanremoval = true) private list<track> tracklist; @column(name = "album_name", nullable = false, length = 32) private string album_name; @column(name = "album_description", nullable = false, length = 255) private string album_description; @lob @basic(fetch = fetchtype.eager) @column(name = "album_avatar") private byte[] album_avatar;
track.class
@entity public class track { @id @generatedvalue @column(name = "track_id") private long track_id; @column(name = "track_no", nullable = false, length = 2) private string track_no; @column(name = "track_name", nullable = false, length = 32) private string track_name; @column(name = "track_length", nullable = false, length = 32) private string track_length; @column(name = "track_file", nullable = false, length = 128) private string track_file; @manytoone(fetch = fetchtype.eager) @joincolumn(name = "album_id", nullable = false) private album album;
track controller.class
@requestmapping(value = "/track", params = "delete", method = requestmethod.post) @transactional public string postdeletetrack(@requestparam long album_id, long track_id) { trackservice.deletetrack(track_id); return "redirect:album/" + album_id; }
track service.class
public void deletetrack(long track_id) { trackrepository.delete(track_id); }
trackrepository.class
@repository public interface trackrepository extends crudrepository<track, long>{ }
when call trackservice.deletetrack(track_id); track in mysql database isn't deleted. hibernate gives me lot of select statements output.
any appreciated , if need more information me feel free ask.
in repository method, add this
@query("delete track t t.id=:id") void delete(@param("id")string id);
since didnt override cascade policy,default cascade policy none, believe work. reference- http://docs.jboss.org/hibernate/orm/5.0/manual/en-us/html_single/
Comments
Post a Comment