【发布时间】:2012-11-01 21:03:30
【问题描述】:
众所周知,Java 日期/时间类型是可变的。因此,如果我们想避免副作用,我们应该将它们封装起来。
我正在寻找一种允许我在 JPA 2.0 中使用这些数据类型并同时实现封装目标的方法。
在我的实践中,我经常使用类似这段代码的模式:
// imports are omitted
@Entity
@Access(AccessType.PROPERTY)
public class MyEntity {
private Integer id;
@Access(AccessType.FIELD)
private Calendar createdAt;
public MyEntity() {
createdAt = Calendar.getInstance();
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Transient
public Date getCreatedAt() {
return createdAt.getTime();
}
public void setCreatedAt(Date createdAt) {
this.createdAt.setTime(createdAt);
}
}
有更好的方法吗?
提前致谢。 祝你有美好的一天。
【问题讨论】:
-
您是否只是想防止属性的值在 setter 之外被更改?因为 Calendar 也是可变的。我不确定你想在这里实现什么。
-
@Perception 你完全正确。我不希望在外部更改时间属性。
-
好吧,只是想澄清一下。您使用的方法在这个用例中看起来不错。
-
你不能创建一个新的 Date 对象并从 getter 中返回它吗?
标签: java jakarta-ee jpa