JPA нужен для явного .refresh на сущности, независимой от CascadeType.REFRESH? - PullRequest
1 голос
/ 09 октября 2011

Почему мой CascadeType.REFRESH фактически не обновляет мои сущности?При добавлении объекта он не обновляет коллекцию (все еще пустую).

Мне нужно явно вызвать entity.refresh ()!Вот мой частичный код (где .ALL можно заменить на .REFRESH, .PERSIST):

@Entity
public class Event extends Model {
    @OneToMany(mappedBy="event", cascade=CascadeType.ALL)
    public List<Invitation> invitations;
}

@Entity
public class Invitation extends Model 
{
    @ManyToOne(cascade=CascadeType.ALL)
    public Event event;
}


// ..
        Event event = new Event(/* ... */);
        event.save();

        if (invitationid > 0)
        {
            Logger.info("Invitation added to event");
            Invitation invite = Invitation.findById(invitationid);
                invite.event = event;
                invite.save();
        }

        // Explicit calling this, will actually do refresh the object and show the invite.
        // event.refresh();

        if (event.invitations == null || event.invitations.size() == 0)
            Logger.info("Still null?!");
// ..

I'm Play!фреймворк, который поставляется с hibernate-jpa-2.0.

1 Ответ

2 голосов
/ 09 октября 2011

Вы несете ответственность за согласованность графа объектов.JPA не будет автоматически добавлять дочерний элемент в коллекцию родителей при сохранении дочернего элемента.Таким образом, вы несете ответственность за выполнение

Invitation invitation = new Invitation();
invitation.setEvent(event);
event.getInvitations().add(invitation);

Еще лучше инкапсулировать это в методе addInvitation класса Event:

public void addInvitation(invitation) {
    this.invitations.add(invitation);
    invitation.setEvent(this);
}
...