views:

242

answers:

2

Hi all,

I have an entity that has a collection in it. The collection is a OneToMany unidirectional relationship storing who viewed a particular file. The problem I am having is that after I load the entity and try to update the collection, I don't get any errors, but the collection is never updated:

Entity:

@OneToMany(cascade = CascadeType.PERSIST)
@JoinTable
protected List<User> users;

File Servlet

@In
private EntityQuery<File> File_findById;

...

File file = File_findById(fileId);
file.getUsers().add(user);
session.update(file);

Even though I call session.update(file) and I see stuff in hibernate logs, I don't see anything in the database indicating that it was saved.

Walter

+1  A: 

Hi Walter,

Use property access instead of field access because of it enables Automatic dirty checking by Hibernate and use @Cascade(CascadeType.SAVE_UPDATE) instead

@OneToMany
@JoinTable
@Cascade(CascadeType.SAVE_UPDATE)
public List<User> getUsers() {
    return this.users;
}

regards,

Arthur Ronald F D Garcia
A: 

Why do you cascade the persist (create) operation only if you also want to cascade merge / update?

With EJB3 / JPA annotations, you may want to add another cascading type:

  • CascadeType.MERGE

Or maybe even:

  • CascadeType.ALL (which also covers Hibernate specific operations like save-update, lock)

If you want to use Hibernate extensions, you may want to use the @Cascade annotation to cascade:

  • SAVE_UPDATE
Pascal Thivent