First of all I'm surprised this code works at all. IMO mappedBy="Parent"
should actually be mappedBy="parent"
(note the lower-case 'p') because the parent property of the Child
class is called parent
and not Parent
.
Second, I suggest you place the annotations on the properties rather than on the accessor methods. I find it makes the whole code
- more readable
- easier to maintain because getters/setters can then be added behind the scenes by Lombok
Answers to your questions depend on what exactly you mean by "get deleted". I assume you mean "deleted through persistence manager".
BUT just in case you expect/want that a child is removed by the JPA provider if you do parent.getChildren().remove(x)
then you need to set orphanRemoval = "true"
on OneToMany
.
Question 1
Parent and all children are deleted. That's the common case.
Question 2
Parent and all children are deleted. That's a rather odd use case. Usually cascade delete is only applied on the one-to-many relationship.
Bonus 1
All relationships in Java and JPA are unidirectional, in that if a source object references a target object there is no guarantee that the target object also has a relationship to the source object.
from the excellent Java Persistence wiki book.
Bonus 2
Dunno. Is the ConstraintViolationException
coming from the underlying data base? Or put differently, how does the DDL for the two tables look like? Was it generated by Hibernate?