素敵なサムシングを独断と偏見で一方的に紹介するブログ(´・ω・`)

IT

投稿日: 2019年10月6日
最終更新日:

【ImprovedNamingStrategyは廃止】スネークケースのDBカラムをキャメルケースのEntityフィールドにマッピングする方法【PhysicalNamingStrategyStandardImpl】

Anker PowerCor

created by Rinker
Anker
¥4,990 (2024/04/03 21:42:08時点 Amazon調べ-詳細)

旅行には必須の大容量モバイルバッテリー!

【最新機種】GoPro hero11 Black

created by Rinker
GoPro(ゴープロ)
¥62,000 (2024/04/03 21:42:08時点 Amazon調べ-詳細)

最新機種でVlogの思い出を撮影しよう!

[ノースフェイス] THE NORTH FACE メンズ アウター マウンテンライトジャケット

created by Rinker
THE NORTH FACE(ザノースフェイス)
¥33,430 (2024/04/03 21:42:09時点 Amazon調べ-詳細)

防水暴風で耐久性抜群なので旅行で大活躍です!

モンスターエナジー 355ml×24本 [エナジードリンク]

created by Rinker
モンスター
¥4,748 (2024/04/03 21:33:15時点 Amazon調べ-詳細)

脳を活性化させるにはこれ!

ドラゴンクエスト メタリックモンスターズギャラリー メタルキング

created by Rinker
スクウェア・エニックス(SQUARE ENIX)
¥3,250 (2024/04/03 21:42:09時点 Amazon調べ-詳細)

みんな大好き経験値の塊をデスクに常備しておこう!

Bauhutte ( バウヒュッテ ) 昇降式 L字デスク ブラック BHD-670H-BK

created by Rinker
Bauhutte(バウヒュッテ)
¥14,935 (2024/04/03 21:42:10時点 Amazon調べ-詳細)

メインデスクの横に置くのにぴったりなおしゃれな可動式ラック!

MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド

created by Rinker
MOFT
¥2,880 (2024/04/03 21:42:18時点 Amazon調べ-詳細)

Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!

スポンサーリンク

336×280




DBはスネークケース、Entityはキャメルケースにしたい

DBアクセスが伴うシステム等の実装をしている際に、設計方針によってはDB側のTableカラム名はスネークケース、Java側のEntityフィールド名はキャメルケースにしたい、という要望があります。

この際に、全てのEntityフィールドに

のようにしても良いが、フィールド数が多かったり変更する際に影響範囲が多かったり課題は沢山あります。

今回はHibernate5系を使っている際にPhysicalNamingStrategyStandardImplを継承して、共通処理としてスネークケースとキャメルケースをマッピング出来るようにしようと思います。

手順

前提

今回は以下のような環境での作業とします。

Point

  • Hibernate: 5.1.0
  • PlayFramework: 2.7
  • MySQL: 5.7

PhysicalNamingStrategyStandardImplの継承クラスの追加

まずは、org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImplを継承したカスタムクラスを実装します。

文字列をキャメルケースからスネークケースに変換するのは自前で行うとちょっとめんどくさいので、今回はGoogleが提供しているライブラリを利用しました。

カラム名以外にも処理を追加する事が可能

org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl.javaを観てみると、他にもtoPhysicalSchemaNametoPhysicalTableNameメソッドがあるので、必要メソッドだけ@Overrideすれば処理を変える事が出来そうです。

hibernate.physical_naming_strategyの追加

次に、presistence.xmlhibernate.physical_naming_strategyに上記のクラスを利用するようにプロパティを追加します。

これで@Columnアノテーションを使わなくても、DBのスネークケースのカラムをEntityのキャメルケースのフィールドに自動でマッピングするようになります。

終わりに

以上のように、Hibernateを使っているのであれば便利なクラスや設定が存在します。

同じような課題を抱えている方はぜひ試してみてください♪

336×280




336×280




CATEGORIES & TAGS

IT, , , , , , , , , , ,

blogenist

Author: blogenist

関連記事

YouTubeも見てね♪

お名前.comサイドバー