2010-11-12 65 views

回答

8

無休眠純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); 
} 

閒來無事

+0

是的,這將工作(+1)。本週末我將通過郵件與您聯繫,詢問我未回答的待定評論。我對這個想法非常感興趣,所以讓我們來討論:) – 2010-11-12 09:04:50

+0

所以這是getter/setter方法。我希望有更簡單的方法來解決這個問題。爲什麼JPA標準沒有爲此提供註釋支持? – newguy 2010-11-14 22:15:15

+0

這也不處理數據庫中列的值爲NULL的情況。您可以修改以獲取NULL值,但是當您將其置入時,它將轉換爲「N」。 – newguy 2010-11-14 22:36:02

1

與上述相類似(@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); 
} 
+0

唯一的缺點是您可能無法維護生成的JPA類 - 因爲您已經爲您定製了訪問器。如果這很重要,則可能需要爲您的JPA類構建一個生成器工廠。不確定這是否可以通過eclipse jetty完成? – wmorrison365 2013-01-16 10:03:38

5

這是不使用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年

2

您可以使用這樣

@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); 
} 

}

相關問題