众所周知,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);
}
}
有更好的方法吗?
提前致谢。 祝你有美好的一天。
最佳答案
可变的日期是我们都必须忍受的设计怪癖。我们已经学会了忍受它,假装 Date 是不可变的并且从不操纵它(而且 Sun 也通过对其进行一些弃用使其变得更容易)。
当您要保护代码免受您自己和可信赖的同事的侵害时,编写防御性代码是没有用的。我希望没有人打算故意做错事!
关于java - 使用@Temporal 类型的 JPA 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13360667/