I have a entity Photo mapped in JPA/Hibernate that have three different children (PhotoSpot, PhotoSecteur, PhotoVoie). I used @Inheritance(strategy = InheritanceType.JOINED), everything works fine for the persist methods, but I can't manage to make it work when I want to delete one of the photo.
I'm trying to delete a photo just by deleting an element from the parent class, but i don't know if it's possible. I looked all the other posts about the same topic, and I think the problem may come from the fact that my child entity has a @ManyToOne asssociation. But I put that association in cascade = CascadeType.ALL on the one side.
Here are my entities (I just put the parent and one child), they are all the same: Here is the parent
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Photo implements Serializable{
// todo fichier properties
private static final String CHEMIN = "D:\\fichiers\\";
private static final int TAILLE_TAMPON = 10240;
public static final String CHAMP_PHOTO = "photo";
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long id;
protected String nom;
Here is one of the child
@Entity
@Table
@PrimaryKeyJoinColumn(name = "id")
@OnDelete(action = OnDeleteAction.CASCADE)
public class PhotoSpot extends Photo {
@ManyToOne
private Spot spot;
My deleting method :
public boolean deletePhoto(Long id){
EntityTransaction transaction = entityManager.getTransaction();
try {
transaction.begin();
Photo photo = entityManager.find(Photo.class, id);
entityManager.remove(photo);
entityManager.flush();
Path path = Paths.get(Photo.getCHEMIN()+photo.getNom());
Files.delete(path);
transaction.commit();
return true;
}catch (Exception e){
if (transaction != null)
transaction.rollback();
e.printStackTrace();
return false;
}
}
Does the problem happens because I'm doing it the wrong way, and that I should delete first the child element? Normally the cascade option should allow me to delete the child when I delete the parent. Thanks!
EDIT :
Ok as i expected, the problem come from the relations. If I enable the org.hibernate.event.internal.DefaultPersistEventListener im getting the un-scheduling entity deletion
like a lot of other people. I checked this JPA/Hibernate remove entity sometimes not working this Hibernate EntityManager: remove referenced entity not working and this Prevent Hibernate from deleting orphaned entities while merging an entity having entity associations with orphanRemoval set to true, but idon't understand exactly what it implies to do in my heritage case. I tried to remove manually the association, but it is still not working.