2

正如我们所知,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);
    }

}

有没有更好的方法来做到这一点?

提前致谢。祝你今天过得愉快。

4

1 回答 1

0

日期可变是我们都必须忍受的设计怪癖。我们已经学会了忍受它,假装 Date 是不可变的并且从不操纵它(而且 Sun 通过在那里拍一些弃用使它更容易)。

当您保护代码免受自己和可信赖的同事的侵害时,编写防御性代码是没有好处的。我希望没有人打算故意做错事!

于 2012-11-13T13:12:32.773 回答