首页 > 解决方案 > Netbeans 12.0 - 从 DB 生成实体类使用 Java Date 类而不是 LocalDate

问题描述

我正在使用 Netbeans 12.0,并为我的数据库表创建我的实体类,我使用 Netbeans Entity Classes from Databasedate除了将我的所有列默认为 Java 8 之前的类之外,它的效果很好Date,而且我最近发现@Temporal从我的类变量(对应于我的表中的列)中删除注释LocalDate不会导致问题。

这是 Netbeans 创建的:

@Column(name = "delivery_date")
@Temporal(TemporalType.DATE)
private Date deliveryDate;

这是我的更新版本:

@Column(name = "delivery_date")
private LocalDate deliveryDate;

LocalDate从我的数据库创建实体类时,是否可以让 Netbeans 使用该类?

我的 Java 应用程序中有许多表具有相应的实体,虽然理论上我可以遍历每个表并用日期替换列,但这听起来并不有趣,尤其是对于未来的实体而言。

我的项目是 Java 8,使用 JPA 2.2 和 EclipseLink 2.7.7。

标签: javajpanetbeanseclipselinkjpa-2.2

解决方案


恐怕在使用常规 Netbeans 版本时这是不可能的。

这是负责该映射的JavaPersistenceGenerator类的片段:

String getMemberType(EntityMember m) {
    String memberType = m.getMemberType();
    if ("java.sql.Date".equals(memberType)) { //NOI18N
        memberType = "java.util.Date";
    } else if ("java.sql.Time".equals(memberType)) { //NOI18N
        memberType = "java.util.Date";
    } else if ("java.sql.Timestamp".equals(memberType)) { //NOI18N
        memberType = "java.util.Date";
    }
    return memberType;
}

如您所见java.util.Date,那里是硬编码的,无法配置。

您可以从 GitHub 签出 Netbeans 源代码,更改java.util.Datejava.time.LocalDate在课堂上:

org.netbeans.modules.j2ee.persistence.wizard.fromdb.JavaPersistenceGenerator

重建 Netbeans 源并替换文件:

<<NETBEANS_INSTALLATION_FOLDER>>/java/modules/org-netbeans-modules-j2ee-persistence.jar

更正版本来自:

<<NETBEANS_SOURCES_FOLDER>>/nbbuild/netbeans/java/modules

这将导致预期的结果。


推荐阅读