JPA нужен для явного.refresh на сущности, независимой от CascadeType.REFRESH?
Почему мой 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?!");
// ..
Я играю! фреймворк, который, кажется, поставляется с hibernate-jpa-2.0.
1 ответ
Решение
Вы несете ответственность за согласованность графа объекта. 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);
}