JDL不支持DayOfWeek与LocalTime类型,如何创建BusinessHours类?
解决JDL不支持DayOfWeek和LocalTime类型的方案
JDL本身默认不包含java.time.DayOfWeek和java.time.LocalTime这两种类型,但可以通过**自定义用户类型(User Type)**来扩展支持,以下是具体实现步骤:
1. 在JDL中声明自定义类型
首先在你的JDL文件里添加自定义类型映射,明确关联到Java的对应类:
// 映射Java的DayOfWeek枚举 userType DayOfWeek implements java.time.DayOfWeek // 映射Java的LocalTime时间类型 userType LocalTime implements java.time.LocalTime
2. 定义BusinessHours实体
接下来就可以像使用JDL原生类型一样,在实体中声明这两个字段:
entity BusinessHours { dayOfWeek DayOfWeek required, // 对应Java的DayOfWeek startTime LocalTime required, // 对应Java的LocalTime endTime LocalTime required // 对应Java的LocalTime }
3. 代码生成与验证
使用JDL工具生成代码后,你会得到符合预期的BusinessHours类:
public class BusinessHours { private DayOfWeek dayOfWeek; private LocalTime startTime; private LocalTime endTime; // 自动生成的getter、setter等方法 }
额外说明
- 确保你的JPA实现(如Hibernate)支持JPA 2.2及以上版本,因为从JPA 2.2开始原生支持
java.time包下的时间类型,无需额外配置转换器。 - 如果使用旧版本JPA,可能需要手动添加
@Converter注解来处理这些类型,但主流框架目前都已支持原生处理。
内容的提问来源于stack exchange,提问作者vic
相关产品推荐
相关产品推荐

