new*_*guy 7 types annotations hibernate boolean jpa
Hibernate中有一个注释,可以在数据库中将布尔类型保存为"Y"/"N".
但是,如果我不想绑定到Hibernate,有没有办法在纯JPA中执行它而不使用getter/setter?
没有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)
没有其他的
这是纯粹的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日发布.
归档时间: |
|
查看次数: |
13313 次 |
最近记录: |