java - 使用@Temporal 类型的 JPA 最佳实践

标签 java jakarta-ee jpa

众所周知,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/

相关文章:

java - 在 Java 中比较图像大小(以 KB 为单位)

java - 通过 GPRS 从 Java 手机传输 SMS(即运行 SMS 网关)?

java.lang.NoClassDefFoundError :javax/net/SocketFactory) in Jboss 7. 5

java - Web.xml 中的 FacesServlet 和 URL 映射

java - JPA + @OneToMany + 删除 : Item is not deleted if I access parent later

java - JPA 嵌套事务和锁定

java - 更新时发生 TransactionRequiredException

java - Runtime.getRuntime().gc() 在 Java 8 中继续存在,有什么用处或者有什么区别吗?

java - 基础 Controller SpringMVC

java - 如何将 EJB 模块从 Netbeans 部署到 Glassfish