6
votes

I use PostgreSQL nad Spring data JPA with Hibernate. I have relation OneToMany with orphanRemoval = false because I very often add many childs to relation.

Parent:

@OneToMany(mappedBy = "parent", cascade = { CascadeType.ALL }, orphanRemoval = false, fetch = FetchType.LAZY) public Set getChildren() { return children; }

Child:

@ManyToOne @JoinColumn(name = "parent_id") public Parent getParent() { return parent; }

To persist or merge object I use method

Iterable< T > save(Iterable< extends T> entities)

form CrudRepository. I save list of parents, where every parent contain set of child. Child table has unique constraint. If constraint violations occurs I want to ignore that and ommit (do not persist) child which cases viloations but I want insert every child which doesn't case constraint violation. How to do that?

2

2 Answers

2
votes

Handle this dirty by Exceptions.

  1. Try to Update the Database, if fine break here. Catch the UniqueViolationException and find the JDBCException. Upcast to your qualified Database Exception and find the broken Children.

  2. Remove the Children from the Parent.

  3. Go to 1.

0
votes

The clean way is to filter the Entitys who will produce unique-violation-exceptions. After you filtered that entitys, you can save the good ones.

Exceptions should used as they realy are: Exceptions.