第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

配置休眠(使用JPA)以將Y / N存儲為布爾類型(而不是0/1)

配置休眠(使用JPA)以將Y / N存儲為布爾類型(而不是0/1)

胡子哥哥 2019-12-20 10:10:11
我可以設置JPA /休眠將Boolean類型持久化為Y/N嗎?在數(shù)據(jù)庫中(該列定義為varchar2(1)。當前將其存儲為0/1。數(shù)據(jù)庫為Oracle。
查看完整描述

3 回答

?
不負相思意

TA貢獻1777條經(jīng)驗 獲得超10個贊

我弄清楚如何執(zhí)行此操作的唯一方法是為類提供兩個屬性。一個作為編程API的布爾值,不包含在映射中。它的getter和setter引用一個私有字符變量Y / N。然后,我有另一個受保護的屬性,它包含在休眠映射中,它的getter和setter直接引用私有char變量。

編輯:正如已經(jīng)指出的那樣,還有直接內置于Hibernate中的其他解決方案。我留下這個答案,是因為它可以在您處理的舊字段無法與內置選項配合使用的情況下使用。最重要的是,這種方法不會造成嚴重的負面影響。


查看完整回答
反對 回復 2019-12-20
?
Cats萌萌

TA貢獻1805條經(jīng)驗 獲得超9個贊

Hibernate具有內置的“ yes_no”類型,可以執(zhí)行您想要的操作。它映射到數(shù)據(jù)庫中的CHAR(1)列。


基本映射: <property name="some_flag" type="yes_no"/>


注釋映射(Hibernate擴展):


@Type(type="yes_no")

public boolean getFlag();


查看完整回答
反對 回復 2019-12-20
?
函數(shù)式編程

TA貢獻1807條經(jīng)驗 獲得超9個贊

這是純JPA,不使用getter / setter。截至2013/2014,這是不使用任何Hibernate特定注釋的最佳答案,但是請注意,此解決方案是JPA 2.1,當首次提出問題時不可用:


@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) ? "Y" : "N";            

        }    


    @Override

    public Boolean convertToEntityAttribute(String value) {

        return "Y".equals(value);

        }

    }

編輯:


上面的實現(xiàn)考慮了與字符“ Y”不同的任何內容,包括null,如false。那是對的嗎?這里有些人認為這是不正確的,并認為null數(shù)據(jù)庫中應該使用nullJava。


但是,如果您返回nullJava,則NullPointerException如果您的字段是原始布爾值,它將給您一個提示。換句話說,除非你的一些領域的實際使用類布爾也最好考慮null為false,并使用上述實現(xiàn)。這樣,無論數(shù)據(jù)庫內容如何,Hibernate都不會發(fā)出任何異常。


如果您確實想接受null并發(fā)出異常(如果數(shù)據(jù)庫的內容不完全正確),那么我猜您不應該接受除“ Y”,“ N”和“ ?!敝獾娜魏巫址鹡ull。使其保持一致,并且不接受“ y”,“ n”,“ 0”和“ 1”之類的任何變體,只會使您以后的生活更加艱難。這是一個更嚴格的實現(xiàn):


@Override

public String convertToDatabaseColumn(Boolean value) {

    if (value == null) return null;

    else return value ? "Y" : "N";

    }


@Override

public Boolean convertToEntityAttribute(String value) {

    if (value == null) return null;

    else if (value.equals("Y")) return true;

    else if (value.equals("N")) return false;

    else throw new IllegalStateException("Invalid boolean character: " + value);

    }

還有另一種選擇,如果要允許使用nullJava而不允許使用數(shù)據(jù)庫:


@Override

public String convertToDatabaseColumn(Boolean value) {

    if (value == null) return "-";

    else return value ? "Y" : "N";

    }


@Override

public Boolean convertToEntityAttribute(String value) {

    if (value.equals("-") return null;

    else if (value.equals("Y")) return true;

    else if (value.equals("N")) return false;

    else throw new IllegalStateException("Invalid boolean character: " + value);

    }


查看完整回答
反對 回復 2019-12-20
  • 3 回答
  • 0 關注
  • 835 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號