I am dealing with one issue. I have relation one-to-many and in my case it looks like that:
@Data
@Entity
public class Event {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String title;
...
@OneToMany(mappedBy = "event", cascade = ALL)
List<TimePeriod> dates;
and TimePeriod entity looks following:
@Entity
@Data
public class TimePeriod {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
...
@ManyToOne
private Event event;
}
My JPA repo looks like that:
@Repository
public interface TimePeriodRepository extends JpaRepository<TimePeriod, Long>
{
}
When i execute following code:
event.getDates().stream().forEach(d -> {
timePeriodRepository.deleteById(d.getId());
});
I dont see that records were removed from database. They are still there. I understand that TimePeriod is owning side in my case, so i understand it should work.
I am operating mainly od event entity, why i put there cascade.ALL option.
But when i had a cascade.ALL also on TimePeriod then not only related records were removed but also EVENT.
Another way which i tried i upadated event side like:
event.setDates(new ArrayList<>());
but after when i save event i was still able to see those date records in database.
Can someone let me know what im doing wrongly ?