简单地说,我在数据库中设置了这样的一列:
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更新数据库设置的本质上不变的字段?
此操作的目的是创建日期创建字段。还有其他情况,例如由触发器设置的数据库字段...
答案 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