强制JPA从数据库中重新加载实体

问题描述 投票:0回答:1

我有一个 Foo 的实体,它与一个 Status 实体的一一对应关系。

@Entity
@NamedQueries({
  @NamedQuery(name = "Foo.findById", query = "select o from Foo o where o.fooId = :fooId")
})
public class Foo implements Serializable {
    @Id
    @Column(name="FOO_ID")
    private Long fooId;

    @OneToOne(mappedBy = "foo")
    private Status status;

    public Long getFooId() {
        return fooId;
    }

    public void setFooId(Long fooId) {
        this.fooId = fooId;
    }

    public Status getStatus() {
        return status;
    }

    public void setStatus(Status status) {
        this.status = status;
    }
}
@Entity
public class FooCurrentStatus implements Serializable {
    @Id
    private Long fooId;

    @OneToOne
    @JoinColumn(name = "FOO_ID")
    private Foo foo;

    public Long getFooId() {
        return fooId;
    }

    public void setFooId(Long fooId) {
        this.fooId = fooId;
    }

    public Foo getFoo() {
        return foo;
    }

    public void setFoo(Foo foo) {
        this.foo = foo;
        if (foo != null) {
            this.fooId = foo.getFooId();
        }
    }
}

我明白这并不是完全错误的,因为当我取一个... Foo 实例,我自动得到它的状态。

从应用程序的角度来看,状态是只读的。它在其他地方被管理,由其他不相关的进程修改数据库信息。

不幸的是,副作用是,每当状态改变时,我的管理实体就会过时。

我怎样才能指示EJBJPA抓取一个新的状态?

jpa refresh
1个回答
1
投票

refresh() 关于 EntityManager API特别用于这样的用例,它可以强制刷新已经从数据库中加载的实例的状态。

entityManager.refresh(foo.getStatus());
© www.soinside.com 2019 - 2024. All rights reserved.