2-2.Hibernateで値をcopyしてDBに保存方法

2021-03-22

こんにちは管理人(@vip___p)です。

今回はHibernateでのcopyの方法について
簡単に触れていこうと思います。
備忘録です。

下記のような方は是非参考にしてください。

  • Hibernateの理解について浅い方
  • HibernateのSessionについて理解が浅い方

HibernateのExpressionの代わり

HibernateのcreateCriteriaの代案や苦労点について

Hibernate/cfg.xml/hbm.xml/propertiesの設定

HibernateのSessionの保存や削除について

Hibernateでのcopyの方法について触れていきます。

Hibernateで値をコピーし保存する方法

Hibernate

Hibernateで値をコピーするには2つ注意が必要です。

まずはBeanUtils.copyPropertiesはSpringのものをインポートするようにしてください。

Springではないほうを使用すると値がコピーされずエラーが出てしまいました。

2つめはcopyPropertiesでコピーした値を保存する際は注意してください。

Session.saveでは値が保存されません。

DTOの型などが同じ場合でもうまくコピーされませんでした。

ですのでSession.saveOrUpdateというHibernateのメソッドを使用するようにしてください。

それではコードを確認していきましょう。

Transaction tx = null;

      try {
            
            Configuration config = new Configuration();
            config = config.configure(); 
            SessionFactory sessions = cfg.buildSessionFactory();
            Session session = sessions.openSession();
            
            tx = session.beginTransaction();
            SampleDTO dto = new SampleDTO();
            SampleCopyDTO copyDto = new SampleCopyDTO();
            
            // DTOに値をセット
            dto.setName("name")
            
            // 第一引数を第二引数にコピーする
            BeanUtils.copyProperties(dto, copyDto);
            
            // 保存
            session.saveOrUpdate(copyDto);
            tx.commit();
        }
        catch (HibernateException he) {
            if (tx!=null) tx.rollback();
            throw he;
        }
        finally {
            session.close();
        }

まとめ

まとめ

今回のまとめです。

Hibernateでの値をcopyする方法についてまとめました。

皆さんの参考になれば幸いです。