JPA与@Column合并(可更新=假,可插入=假)不会返回实际的列值

时间:2018-09-26 21:22:59

标签: hibernate jpa

简单地说,我在数据库中设置了这样的一列:

create table if not exists thing(
    id bigint primary key,
    ...,
    test int default 5
);

还有一个这样的实体

@Entity
public class Thing {

    private long id;
    ...
    private int test;
    ...

    @Id public long getId() { return id; }
    public void setId(long id) { this.id = id; }

    public void setTest(int test) { this.test = test; }

    @Column(updatable = false, insertable = false)
    public int getTest() {
        return test;
    }

当我合并这样的新实体时:

Thing thing = new Thing ();
thing.setId(123);
Thing managed = em.merge(thing);

managed不会将test字段与数据库同步。它将显示0。我怎样才能强制所有JPA更新数据库设置的本质上不变的字段?

此操作的目的是创建日期创建字段。还有其他情况,例如由触发器设置的数据库字段...

1 个答案:

答案 0 :(得分:0)

如Billy Frost所述-您必须从数据库中刷新实体。

但是在调用刷新之前,您必须强制Hibernate执行SQL语句。

Thing thing = new Thing ();
thing.setId(123);
Thing managed = em.merge(thing);

em.flush(); // executes SQL statements
em.refresh(managed ); // gets the managed thing from the database