You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EclipseLink中@MappedSuperclass父类的@Enumerated、@Convert注解不生效

问题根因

你配置的注解访问模式和注解放置位置不匹配:
你在BaseEntity类上标注了@Access(AccessType.PROPERTY),该配置要求EclipseLink从类的getter方法上读取JPA相关注解,但你当前把@Enumerated、@Convert、@Id、@Column所有注解都放在了类的私有字段上,框架无法读取到这些配置,所以使用了默认的持久化规则:枚举默认按序号(整数)存储、Instant类型直接走Java序列化写入数据库,进而触发你遇到的报错。

解决方案

二选一即可:

方案1:调整注解放置位置

保留@Access(AccessType.PROPERTY)配置,把所有JPA注解从字段移到对应的getter方法上,示例代码如下:

@MappedSuperclass
@Access(AccessType.PROPERTY)
public abstract class BaseEntity {
    private String id;
    private StatusEnum status;
    private Instant timestamp;
    
    @Id
    @Column(name = "ID", nullable = false)
    public String getId() {
        return id;
    }
    
    @Column(name = "STATUS", nullable = false)
    @Enumerated(EnumType.STRING)
    public StatusEnum getStatus() {
        return status;
    }

    @Column(name = "TIMESTAMP", nullable = false)
    @Convert(converter = InstantConverter.class)
    public Instant getTimestamp() {
        return timestamp;
    }
    
    // 其他setter方法
}

方案2:调整访问模式配置

把BaseEntity上的@Access(AccessType.PROPERTY)修改为@Access(AccessType.FIELD),如果你的项目默认访问模式就是FIELD,也可以直接删掉这行注解,原有放在字段上的注解就可以被正常识别。

修改完成后清理WildFly部署缓存,重新打包部署即可恢复正常。


内容的提问来源于stack exchange,提问作者balywin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:54:04