There is an annotation in Hibernate that can persist boolean types as 'Y'/'N' in the database.
However if I don't want to bind to Hibernate is there a way to do it in pure JPA without using getters/setters?
Pure JPA without Hibernate is achieved by using some kind of conversion
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);
}
Nothing else
This is pure JPA without using getters/setters, so it answers the question:
@Entity
public class Person {
@Convert(converter=BooleanToStringConverter.class)
private Boolean isAlive;
...
}
And then:
@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);
}
}
Please note this solution is JPA 2.1, and was not available when the question was first asked: The JPA 2.1 specification was released 22 April 2013.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With