【发布时间】:2021-01-19 00:16:40
【问题描述】:
我创建了 AttributeConverter 类,它将 Enum 转换为 DB 值并覆盖了必要的方法。 如果我使用下面的 JPA 查询,那么转换器会被调用并得到正确的结果。
public List<Driver> findByStatus(DriverStatus status);
但是,如果我使用 Query 注释,则不会调用 AttributeConverter。我有更复杂的查询,我需要将本机查询与属性转换器一起使用,但它对我不起作用。
@Query(value = "select * from driver where status=:status", nativeQuery = true)
public List<Driver> findByStatus1(DriverStatus status);
有没有办法处理这个要求?
更新 1 - 下面是转换器代码
@Converter(autoApply = true)
public class DriverStatusConverter implements AttributeConverter<DriverStatus, String> {
@Override
public String convertToDatabaseColumn(DriverStatus driverStatus) {
if (driverStatus == null) {
return null;
}
System.err.println("from converter" +driverStatus.getCode());
return driverStatus.getCode();
}
@Override
public DriverStatus convertToEntityAttribute(String code) {
if (code == null) {
return null;
}
return Stream.of(DriverStatus.values()).filter(c -> c.getCode().equals(code)).findFirst()
.orElseThrow(IllegalArgumentException::new);
}
}
【问题讨论】:
-
如果可能,您能否提供
converter和entity代码sn-p? -
将代码添加到问题@Sujitmohanty30
-
谢谢,但我也希望您也添加实体。
标签: sql spring-boot hibernate spring-data-jpa