java加一个字段需要修改哪些_java-需要知道每个字段是否已更改,如何在H...

给定如下所示的实体,您可以跟踪其中一个字段的更改(同时也保留其原始值).

@Entity

@Table(schema = "test", name = "test")

public final class Test {

private static final int ORIGINAL = 0;

private static final int CURRENT = 1;

private Integer id;

// holds the original and current state of the field

private final AtomicReferenceArray field = new AtomicReferenceArray<>(2);

@Id

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

@Transient

public String getOriginalField() {

return field.get(ORIGINAL);

}

@Basic

public String getField() {

return field.get(CURRENT);

}

public void setField(String field) {

this.field.compareAndSet(ORIGINAL, null, field);

this.field.set(CURRENT, field);

}

@PreUpdate

public void preUpdate() {

System.out.format("Original: %s, New: %s

", getOriginalField(), getField());

}

...

}

如果这样的数据库中只有一行:

id: 1

field: a

version: 2011-12-02 11:24:00

在字段更新之前(例如,从a到b),您将获得以下输出.

Original: d, New: b

即使该实体被多次更新,原始值也将保留下来,并且可以通过相应的getter(getField和getOriginalField,在命名上您会比我更有创造力)来访问两种状态.

这样,您可以避免在数据库中创建版本列,也可以向客户端隐藏实现详细信息.

可以使用数组,列表等代替AtomicReferenceArray来跟踪所有更改,就像这样.

@PreUpdate当然不是必需的,但是通过这种方式,可以通知您实体状态的更改,并自动将更新的字段保存到文件中.还有更多类似这些的注释:有关其他注释类型,请参见javax.persistence的文档.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值