sql >> データベース >  >> RDS >> Mysql

親/子オブジェクトが同時に永続化されている場合に、Hibernate + Spring JPA構成で外部キー値を設定するにはどうすればよいですか?

    そのコードには、機能を妨げる2つのことがあります。

    1. エンティティには@Idがありません 。これは一例であるため、おそらく省略しただけですが、指摘する価値があります。
    2. parent_idをダブルマップしました 。子には、同じ列にマップされたLongフィールドとParentフィールドの両方があります。ロングを取り除きます。それはあなたが求めている親の関係です。

    その後、あなたが持っているのは、結合列を備えた完全に伝統的な双方向の1対多です。それがうまくいかない場合は、それらを作成して保存するコードで何か問題が発生しています。おそらく、オブジェクトを適切に作成していません。これらのエンティティを使用した正しいコードは、次のようになります。

    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();
    Parent p = new Parent();
    Child child = new Child();
    child.parent = p;
    Child child1 = new Child();
    child1.parent = p;
    p.children = Arrays.asList(child, child1);
    session.save(p);
    session.save(p.children.get(0));
    session.save(p.children.get(1));
    tx.commit();
    

    特に、子は子の親だけでなく親にも設定する必要があることに注意してください。半分壊れたオブジェクトモデルを構築しないでください。Hibernateが混乱をクリーンアップすることを期待してください。多くの人は、この一見明白な要件を無視し、Hibernateが不安定または信頼できないように見える理由を疑問に思います。




    1. jQuery UIソート可能、次にデータベースに順序を書き込む

    2. 同じテーブル内の特定の値の列値を行数に更新します

    3. MySQLチュートリアル– MySQLサーバーログの管理:回転、圧縮、保持、削除

    4. PHPを使用してMySQLからcsvファイルにデータをダウンロードする