2016-09-19 10 views
3

を私はブール値に「Y」/「N」列を変換するためのソリューションhereを実装しています:ブールY/NフィールドのJPA AttributeConverterの使用:「ブールリテラル値をレンダリングすることができません」

@Basic(optional = false) 
@Column(name = "ACTIVE_YN") 
@Convert(converter = BooleanToStringConverter.class) 
private Boolean active; 

...と:

@Converter 
public class BooleanToStringConverter implements AttributeConverter<Boolean, String> { 

    @Override 
    public String convertToDatabaseColumn(Boolean value) { 
     return (value != null && value) ? "Y" : "N"; 
    } 

    @Override 
    public Boolean convertToEntityAttribute(String value) { 
     return "Y".equals(value); 
    } 
} 

問題は、私はJPQLのboolean値を使用するように見えることができないということです。次のコードは、以下のエラーを与える:

@Query("select thing from MyThing thing where thing.id = :id and thing.active = true") 
public MyThing findOneActive(@Param("id") ThingIdEnum id); 

エラー:このフィールドは、varchar型/文字変換の前に、JPQLは、文字列として扱う必要があるため、

java.lang.IllegalArgumentException: Validation failed for query for method public abstract x.y.z.MyThing x.y.z.MyThingRepository.findOneActive(x.y.z.ThingIdEnum)! 
... 
Unable to render boolean literal value [select thing from MyThing thing where thing.id = :id and thing.active = true] 
... 
org.hibernate.type.descriptor.converter.AttributeConverterTypeAdapter cannot be cast to org.hibernate.type.LiteralType 

答えて

3

が、判明します。これを行うより良い方法があるかどうかはわかりませんが、次のようになりました。

@Query("select thing from MyThing thing where thing.id = :id and thing.active = 'Y'") 
public MyThing findOneActive(@Param("id") ThingIdEnum id); 
関連する問題