Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to ignore unique violation during insert list of objects which contain set of object

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?

like image 355
Mariusz Avatar asked Sep 18 '12 00:09

Mariusz


1 Answers

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.

like image 51
Grim Avatar answered Nov 02 '22 08:11

Grim