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