java - 使用 JPA (Hibernate) 获取旧实体

标签 java jsf jpa

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

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

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

我通过将其数据属性设置为 null 并从父实体 (DataEntity) 的集合中删除该实例来临时删除 SubDataEntity 的一个实例。 在 ajax 请求之后,旧数据仍然显示在 JSF-Page 中,如果我真的在 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; 

数据实体:

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

子数据实体:

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

最佳答案

失败是由于组件中的属性“immediate”设置为 true,显示和编辑其值。 打开 process="@this"和 process="@form"之后。

关于java - 使用 JPA (Hibernate) 获取旧实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39444572/

相关文章:

java - MysqlDump 在空格分隔的路径中不起作用

java - 比较数据 vector

java - 通过套接字发送多个数据值的最佳方法是什么?

jsf - 如何将响应大小和时间插入页面本身,至少部分?

java - 如何访问 java bean 的非 getter/setter 方法

java - MYSQL 8 JPA 2.0 mysql 在 JPA 保存后向当前日期添加 1 秒

java - Hibernate 事务管理比较

java - 如何在控制台上进行 Java 日志记录并写入文件?

hibernate - 带有 Hibernate 示例 Web 应用程序的 JSF

java - 如何连接我的 Java EE 应用程序中的各个部分