Netbeans 12.0 - 从数据库生成实体 类 使用 Java 日期 class 而不是 LocalDate

Netbeans 12.0 - Generating Entity Classes from DB uses Java Date class instead of LocalDate

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

这是 Netbeans 创建的:

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

这是我更新后的版本:

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

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

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

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

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

这是来自 class 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 已 hard-coded 且无法配置。

您可以从 GitHub 检出 Netbeans 源代码,在 class 中将 java.util.Date 更改为 java.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

这将导致预期的结果。