JPA OneToMany, always empty


i have a bidirectional, one to many, and many to one relationship. say, a Company has many Persons, and a Persons has one company, so, in company,

@OneToMany(mappedBy = "company", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Collection<Person> persons;

and in Person,

private Company company;

now, say i have a @PrePersist / @PreUpdate method on Company, where when it is updated, i want to set the same timestamp on all the People … like,

public void setLastModified() {
    this.lastModified = System.currentTimeMillis();
    if (persons != null) {
        for (Person person : persons) {

when i debug this, i see that the persons field in Company is always empty. when i look at the type of the persons collection, it's a java.util.Vector. not sure if that's relevant. i expected to see some auto-loading JPA collection type.

what am i doing wrong?

Best Solution

You must set both sides of your relationship. When you create a new Person and set its Company you must also add the Person to the Company's persons (employees?).

Also, you should not change another object in one object's prePersist/Update, you should use its own prePersist/Update event.