使用JPA(Hibernate)获取旧实体

时间:2016-09-12 06:38:56

标签: java jsf jpa

即使我禁用了hibernate的二级缓存,我也会在我的JSF页面中显示JPA的旧实体数据。

有三个实体:MessageEntities包含DataEntities,包含SubDataEntities。

SubDataEntities扩展了两种不同的类型。

我通过将其data-attribute设置为null临时删除SubDataEntity的实例,并从父实体(DataEntity)中的集合中删除该实例。 在ajax-request之后,旧的数据仍然显示在JSF-Page中,如果我真的在DB上执行成功的删除操作。

MessageEntity:

@Entity(name = "Message")
@Table(name = "message")
public class MessageEntity {


  @Column(name = "version")
  private String               version;

  @Column(name = "variant")
  private String               variant; 

  @OneToMany(mappedBy = "message", fetch = FetchType.EAGER, orphanRemoval = true, cascade = CascadeType.ALL)
  private List<DataEntity> data; 

DataEntity:

@Entity(name = "Data")
@Table(name = "data")
public class DataEntity {

  @OneToOne
  @JoinColumn(name = "messageId")
  private MessageEntity     message;

  @OneToMany(mappedBy = "data", fetch = FetchType.EAGER, orphanRemoval = true, cascade = CascadeType.ALL)
  private List<SubDataEntity> subData; 

SubDataEntity:

@Entity(name = "SubData")
@Table(name = "subData")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class SubDataEntity implements Serializable {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(unique = true, name = "sd_id")
  private Integer            id;

  @OneToOne(cascade = CascadeType.REFRESH)
  @JoinColumn(name = "dataId")
  private DataEntity         data;

  @Column(name = "value")
  private String             value;

2 个答案:

答案 0 :(得分:0)

可能是因为缓存了第一级... 在加载数据时尝试逐出缓存..

getEntityManager().getEntityManagerFactory().getCache().evictAll();

答案 1 :(得分:0)

导致失败的原因是组件中属性“immediate”设置为true,即显示和编辑值。 在打开process =“@ this”和process =“@ form”之后。