EclipseLink" cascade = CascadeType.REFRESH"不级联entityManager.refresh()

时间:2014-12-16 23:12:40

标签: java jpa eclipselink

我有一个简单的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设置?

感谢您的帮助。

0 个答案:

没有答案