一、升级前的程序
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;
}
}
网友评论