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