是否可以在纯JPA中进行类型转换(从布尔值到yes_no)?

new*_*guy 7 types annotations hibernate boolean jpa

Hibernate中有一个注释,可以在数据库中将布尔类型保存为"Y"/"N".

/sf/ask/80838341/ an-而不是0-1

但是,如果我不想绑定到Hibernate,有没有办法在纯JPA中执行它而不使用getter/setter?

Art*_*ald 8

没有Hibernate的纯JPA是通过使用某种转换实现的

private boolean enabled;

@Transient
public boolean isEnabled() {
    return this.enabled;
}
public void setEnabled(boolean enabled) {
    this.enabled = enabled;
}

@Column(name="ENABLED")
public String getEnabledAsString(){
    return enabled ? "Y" : "N";
}

public void setEnabledAsString(String enabled){
    this.enabled = "Y".equalsIgnoreCase(enabled);
}
Run Code Online (Sandbox Code Playgroud)

没有其他的


Mar*_*rcG 6

这是纯粹的JPA而不使用getter/setter,所以它回答了这个问题:

@Entity
public class Person {    

    @Convert(converter=BooleanToStringConverter.class)
    private Boolean isAlive;    
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后:

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

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

    @Override
    public Boolean convertToEntityAttribute(String value) {
        return "Y".equals(value);
        }
    }
Run Code Online (Sandbox Code Playgroud)

请注意此解决方案是JPA 2.1,并且在首次提出问题时无法使用:JPA 2.1规范于2013年4月22日发布.