如何将错误的布尔值从属性转换器发送为null或'N'到数据库

时间:2019-08-28 10:41:06

标签: java database hibernate jpa converters

我的情况如下所示,其中,我有下面的AttributeConverter映射到指标列,可以说FRUIT_IND可以包含null,'Y'或'N'值

import javax.persistence.AttributeConverter;
import javax.persistence.Converter;

@Converter
public class BooleanToCharAttributeConverter implements AttributeConverter<Boolean, Character> {

其中有一个convertToDatabaseColumn方法,使用true / false作为输入并检查数据库中的列值。

@Override
    public Character convertToDatabaseColumn(Boolean booleanValue) {

        if (booleanValue) {
            return 'Y';
        } else {
            return 'N';
        }
    }
@Override
    public Boolean convertToEntityAttribute(Character charEntered) {

        if (Objects.nonNull(charEntered)) {
            if(Character.valueOf('Y').equals(charEntered)) {
                return true;
            }else {
                return false;
            }

        } else {
            return false;
        }
    }

现在我的问题是我们有一些数据是从其他流填充的,但它的值仍为null。但是,当尝试使用JPA方法获取报告以获取所有FRUIT_IND为false的记录时,它却无法获取任何记录(这是可以预期的,因为大多数FRUIT_IND由于数据已迁移而为null)。

我可以通过任何方式修改此转换器以相同的方式获取具有null或'N'的记录吗?或者在休眠结束时是否有任何方法可以将null和'N'视为一个相同的对象。

先谢谢了:)

1 个答案:

答案 0 :(得分:0)

我从您的问题中了解到的是,您希望从JPA的FRUIT_IND为null或N的数据库中获取结果。

为此,您可以在存储库中定义一个方法来扩展JPARepository。

returnType findAllByFruit_ind(String fruit_ind);

要记住的事情-在方法名称fruit_Ind应该与实体类中的名称相同。