美文网首页
spring boot升级带来的jpa的属性转换错误

spring boot升级带来的jpa的属性转换错误

作者: 天草二十六_简村人 | 来源:发表于2021-08-17 19:23 被阅读0次

一、升级前的程序

0、启动的过程中,报错信息见下:

2021-08-16 16:42:13.000 ERROR [xx-service,,,] 3865656 --- [           main] o.h.metamodel.internal.MetadataContext   : HHH015007: Illegal argument on static metamodel field injection : com.xx.service.coupon.domain.model.CouponBatch_#useScopeBizIds; expected type :  org.hibernate.metamodel.model.domain.internal.SingularAttributeImpl; encountered type : javax.persistence.metamodel.SetAttribute

1、CouponBatch.java

@Column(name = "use_scope_biz_id", columnDefinition = "VARCHAR(2000) default '' COMMENT '使用范围业务ID'")
    @Convert(converter = StringSetJpaConverter.class)
    private Set<String> useScopeBizIds;

2、StringSetJpaConverter.java

@Converter(autoApply = true)
public class StringSetJpaConverter implements AttributeConverter<Set<String>, String> {

    @Override
    public String convertToDatabaseColumn(Set<String> attribute) {
        if (attribute == null) {
            return null;
        }

        return StringUtils.join(attribute, ",");
    }

    @Override
    public Set<String> convertToEntityAttribute(String dbData) {
        if (StringUtils.isNotBlank(dbData)) {
            return StringUtils.splitNotBlackTrimSetBySeparator(dbData, ",");
        }
        return null;
    }
}

二、解决方案

Set<String> 封装到类StringSet中。

1、CouponBatch.java

@Column(name = "use_scope_biz_id", columnDefinition = "VARCHAR(2000) default '' COMMENT '使用范围业务ID'")
    @Convert(converter = StringSetJpaConverter.class)
    private StringSet useScopeBizIds;

2、StringSet.java

@AllArgsConstructor
@NoArgsConstructor
@Data
public class StringSet {
    private Set<String> stringSet;
}

3、StringSetJpaConverter.java

@Converter(autoApply = true)
public class StringSetJpaConverter implements AttributeConverter<StringSet, String> {

    @Override
    public String convertToDatabaseColumn(StringSet attribute) {
        if (attribute == null) {
            return null;
        }

        return StringUtils.join(attribute.getStringSet(), ",");
    }

    @Override
    public StringSet convertToEntityAttribute(String dbData) {
        if (StringUtils.isNotBlank(dbData)) {
            return new StringSet(splitNotBlackTrimSetBySeparator(dbData, ","));
        }
        return null;
    }
}

参考:https://stackoverflow.com/questions/61385330/using-attributeconverter-for-collection-logs-error-hhh015007-illegal-argument-o

相关文章

网友评论

      本文标题:spring boot升级带来的jpa的属性转换错误

      本文链接:https://www.haomeiwen.com/subject/agkbbltx.html