Java 使用JPA获取旧实体(Hibernate)

Java 使用JPA获取旧实体(Hibernate),java,jsf,jpa,Java,Jsf,Jpa,即使禁用了hibernate的二级缓存,我也会在JSF页面中使用JPA获取旧的实体数据 有三个实体:MessageEntities包含DataEntities,而MessageEntities包含SubDataEntities 子数据实体由两种不同的类型扩展 我通过将子DataEntity的数据属性设置为null临时删除其实例,并从父实体(DataEntity)的集合中删除该实例。 在ajax请求之后,旧数据仍然显示在JSF页面中,如果我真的在DB上执行了成功的删除操作的话 消息实体: @Ent

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

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

子数据实体由两种不同的类型扩展

我通过将子DataEntity的数据属性设置为null临时删除其实例,并从父实体(DataEntity)的集合中删除该实例。 在ajax请求之后,旧数据仍然显示在JSF页面中,如果我真的在DB上执行了成功的删除操作的话

消息实体:

@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; 

可能是由于第一级缓存。。 加载数据时,请尝试退出缓存

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

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

@PrashantKantara感谢您的建议。不幸的是,无论是在删除实体还是加载数据时,清理chache都不会影响结果。从原始问题中看不到这一点,因此这个Q和A不是很有用,因为它可能依赖于代码中不可见的其他部分。您好,您解决了这个问题吗?
@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;
getEntityManager().getEntityManagerFactory().getCache().evictAll();