Hibernate中有一个注释可以在数据库中将布尔类型保存为'Y'/'N'。是否可以在纯JPA中进行类型转换(从布尔型到yes_no)?
但是,如果我不希望绑定到Hibernate是有办法做到这一点在纯JPA,而无需使用getter/setter方法?
Hibernate中有一个注释可以在数据库中将布尔类型保存为'Y'/'N'。是否可以在纯JPA中进行类型转换(从布尔型到yes_no)?
但是,如果我不希望绑定到Hibernate是有办法做到这一点在纯JPA,而无需使用getter/setter方法?
无休眠纯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);
}
闲来无事
与上述相类似(@Arthur罗纳德·加西亚FD)实现,但是你也可以使用JPA现场访问和将伊娃留在具有临时访问器的数据库类型中 - 标记为@Transient
。这确保JPA通过字段访问访问实体,但保留访问器可用于适当类型的用法。
使用上面的例子:
@Column(name="isconstrained")
private int isConstrained;
@Transient
pubic boolean getIsConstrained() {
return (isConstrained == 1);
}
@Transient
public void setIsConstrained(boolean isConstrained) {
this.isConstrained = (isConstrained? 1 : 0);
}
唯一的缺点是您可能无法维护生成的JPA类 - 因为您已经为您定制了访问器。如果这很重要,则可能需要为您的JPA类构建一个生成器工厂。不确定这是否可以通过eclipse jetty完成? – wmorrison365 2013-01-16 10:03:38
这是不使用getter/setter方法纯JPA,所以它回答了这个问题:
@Entity
public class Person {
@Convert(converter=BooleanToStringConverter.class)
private Boolean isAlive;
...
}
然后:
@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);
}
}
请注意这个解决方案是JPA 2.1,并且在问题首次被问到时不可用:JPA 2.1 specificat离子放出4月22日2013年
您可以使用这样
@Entity
public class Employee {
@Convert(converter=BooleanTFConverter.class)
private Boolean isActive;
}
@Converter
public class BooleanYNConverter implements AttributeConverter<Boolean, String>{
@Override
public String convertToDatabaseColumn(Boolean value) {
if (value) {
return "Y";
} else {
return "N";
}
}
@Override
public Boolean convertToEntityAttribute(String value) {
return "Y".equals(value);
}
}
是的,这将工作(+1)。本周末我将通过邮件与您联系,询问我未回答的待定评论。我对这个想法非常感兴趣,所以让我们来讨论:) – 2010-11-12 09:04:50
所以这是getter/setter方法。我希望有更简单的方法来解决这个问题。为什么JPA标准没有为此提供注释支持? – newguy 2010-11-14 22:15:15
这也不处理数据库中列的值为NULL的情况。您可以修改以获取NULL值,但是当您将其置入时,它将转换为“N”。 – newguy 2010-11-14 22:36:02