ジャクソン列挙列挙型のシリアライズとデシリアライズを使用した春の起動時の問題でいえば、
JPAエンティティを使用してエンティティに列挙された問題について話をしてきます。
または列挙:
@Getter @AllArgsConstructor パブリック 列挙 EnumExpenseType 実装BaseEnum { 小さな喜び( 1 )、 大喜び( 2 ) プライベート 最終 int型の値; }
インデックス序列挙値の値とは、上で対応できる場合はもちろん、タスクの設定をしない、ここでの前提はには対応しません。
すべてのJPAは、我々はそれを教えてくれない限り、コンストラクタは、ある列挙かわからないの後に、クエリおよびマッピングのエンティティを保存し、両方のは、まだ、同じ問題ジャクソンのシリアル化を持っています。
直接コードに:
@ SLF4J パブリック クラス EnumConverter <Eが拡張 BaseEnum>を実装し AttributeConverter <E、整数> { 民間 最終クラス<E> clazzを。 公共 EnumConverter(クラス<E> clazz){ この .clazz = clazz。 } @Override パブリック整数convertToDatabaseColumn(BaseEnum属性){ 戻りattribute.getValueを(); } @SuppressWarnings( "未チェック" ) @Override 公共E convertToEntityAttribute(整数dbdataの){ もし(dbdataの== NULL ){ 戻り NULL ; } E [] enumConstantsの =のclazz.getEnumConstants(); のための(E E:enumConstants){ IF(e.getValue()== Integer.valueOf(dbdataの)){ 戻りE。 } } log.error( "列挙列挙変換異常[" + clazz.getSimpleName()+ "]、データベースライブラリは:[" + dbdataの+ "]" ); 戻り NULL ; } }
ここでは二つの方法、一つのキーは、我々が定義した値ではなく、インデックスの順序を使用し、データを保存するための列挙値です。
別のマッピング値ではなく、インデックスの順序に従って、フィールドがデータベースからマッピングされたクエリを列挙することです。
これは単なる抽象化の方法、各列挙子または特定のクラスがそれにこのクラスを継承し、書き込みです。
以下のような:
パブリック クラス EnumExpenseTypeConverterが延び EnumConverter <EnumExpenseType> { パブリック EnumExpenseTypeConverter ()
{ スーパー(EnumExpenseType。クラス)。}}