我有一个简单的JPA映射,其中一切正常,只是刷新没有级联到子实体。
以下是我的相关代码:
@Entity
@Table(name = "prospection")
public class ProspectionImpl extends AbstractIdentifiedObject<Prospection> implements Prospection {
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@OneToMany(targetEntity = ProspectionLocationImpl.class, fetch = FetchType.EAGER, cascade =
CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "prospection_id")
@JoinFetch(JoinFetchType.OUTER)
private Collection<Location> locations = new ArrayList<Location>();
}
我的bean ProspectionLocationImpl如下:
@Entity
@Table(name = "prospection_perimetre")
public class ProspectionLocationImpl extends AbstractIdentifiedObject<ProspectionLocationImpl>
implements Location {
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@ManyToOne(targetEntity = CityImpl.class, fetch = FetchType.EAGER, cascade = CascadeType.REFRESH)
@JoinColumn(name = "commune_id")
@JoinFetch(JoinFetchType.INNER)
private City city;
}
现在由于某种原因,我需要对我的ProspectionImpl bean进行刷新,所以我这样做:
entityManager.refresh(prospection);
结果是刷新的ProspectionImpl
bean,但是具有空城市信息(ID除外)的locations
的相同集合。现在在我的测试中,我有一个非空的Location列表,所以我尝试手动完成:
entityManager.refresh(prospection.getLocations().iterator().next());
它工作正常,我的城市现在充满了数据库中的所有数据。
我觉得我的“CascadeType.ALL”没有级联刷新。我尝试cascade = { CascadeType.ALL, CascadeType.REFRESH}
明确设置REFRESH级联,但我找不到任何级联REFRESH的东西。
我做错了吗? 是否存在无法REFRESH级联的全局EclipseLink设置?
感谢您的帮助。