为什么我的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一起发布的框架。
答案 0 :(得分:2)
你负责对象图的一致性。保存孩子时,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);
}