Spring Data JPA 在 Spring Boot 应用程序中不使用 AttributeConverter

BHa*_*man 3 java spring hibernate spring-data-jpa spring-boot

我有一个 spring boot 应用程序,它AttributeConverter为一个实体指定一个,该实体将枚举从大写转换为标题大小写以存储在数据库中。

我有以下实体:

@Entity
@Table(name = "customerleads")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class CustomerLead implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Enumerated(EnumType.STRING)
    @Column(name = "type")
    @Convert(converter = CustomerLeadTypeConverter.class)
    private CustomerLeadType type = CustomerLeadType.OPEN;
}
Run Code Online (Sandbox Code Playgroud)

以及以下 AttributeConverter 类:

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

    @Override
    public String convertToDatabaseColumn(CustomerLeadType attribute) {
        switch (attribute) {
            case OPEN:
                return "Open";
            case CLOSED:
                return "Closed";
            case DELETED:
                return "Deleted";
            default:
                throw new IllegalArgumentException("Unknown" + attribute);
        }
    }

    @Override
    public CustomerLeadType convertToEntityAttribute(String dbData) {
        switch (dbData) {
            case "Open":
                return OPEN;
            case "Closed":
                return CLOSED;
            case "Deleted":
                return DELETED;
            default:
                throw new IllegalArgumentException("Unknown" + dbData);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

似乎也@Converter(autoApply = true)没有@Convert(converter = CustomerLeadTypeConverter.class)触发转换。

Ali*_*ani 12

删除@Enumerated(EnumType.STRING)

// @Enumerated(EnumType.STRING)
@Column(name = "type")
@Convert(converter = CustomerLeadTypeConverter.class)
private CustomerLeadType type = CustomerLeadType.OPEN;
Run Code Online (Sandbox Code Playgroud)

  • @ArunGowda如果我理解正确,问题是“@Enumerated”和“@Convert”存在冲突。他们指示使用两种互斥的方法在枚举和另一种值类型之间进行转换。这就是为什么你不能同时使用两者。 (3认同)