2017-11-29 10 views
3

に参照を交差させ、両方を設定しますidProjectはdbではnullにできないので、プロジェクトがまだ作成されていないのでIDがないのでエラーが発生します。私はメソッドを作成するには、実行して、それを解決することができます知っている:Hibernateは、私は2つのエンティティ、プロジェクトとProjectFeeを持って作成

  1. 各1
  2. の更新プロジェクト
ためidProjectを設定するプロジェクトにProjectFeesを追加プロジェクト
  • を作成し、プロジェクト
  • から
  • をProjectFeesを削除します

    これは一種の「汚い」方法なので、自動的にこれを行う方法があるかどうかを知りたいのですが。

  • +0

    リレーションの両側に参照を設定し、それを永続化してみてください。 –

    +0

    @AbdullahKhan問題は、プロジェクトがデータベースにまだ存在しないため、私はProject.idを持っていないので、私はそれを行うことができないということです。 – Aldeguer

    答えて

    1

    変更これまでごProjectFeesマッピング:

    <many-to-one name="idProject" class="com.gesmifid2.common.model.Project"> 
        <column name="id_project" /> 
    </many-to-one> 
    

    編集:

    あなたProjectFeeクラスは次のようになります。

    public class ProjectFee implements Serializable { 
        //some more fields 
        private Project project; //project ProjectFee is related to 
    } 
    

    そして、あなたはProjectに新しいProjectFeeを追加するたびに、そのProjectProjectFeeに設定する必要があります。 Projectクラスのメソッドの例:あなたが密接にあなたのProjectFeeクラスを見てみると、(外部キーid_projectなど)それが、これは何とかクラスProjectに関連していることを知る方法はありません

    public void addProjectFee(ProjectFee pf){ 
        fees.add(pf); 
        pf.setProject(this); 
    } 
    
    +0

    引き続き同じエラー、 '原因:com.mysql.jdbc.exceptions.jdbc4 。MySQLの場合、「id_project」列はnullにはなれません。 – Aldeguer

    +0

    これはうまくいくはずですが、ProjectFeeのプロジェクト全体ではなく、idProjectを作成したいだけです。 – Aldeguer

    +0

    @Aldeguer実際にORM(双方向マッピング) 。データベース側では、代わりに対応する表にIDのみが表示されます。 –

    0

    。そのため、両方のオブジェクトを一緒に保存すると、ProjectFeeクラスは、Projectクラスの列番号id_projectを入力する必要があることを知りません。

    は二つの可能性があります -

    1. どちらか最初Projectオブジェクトを保存し、その後ProjectFeeオブジェクトにIDを提供することで、(あなたが質問で述べたように)あなたが自分でid_project列を移入します。
    2. Projectのプロパティをid_projectに設定してエンティティで外部キー関係を作成し、両方のエンティティを列id/id_projectに参加させます。

    希望があれば。

    +0

    最初のものは私がすでにやっているもので、2回目はidProjectをプロジェクトではなく整数にしたいので、今回は有効ではありません – Aldeguer

    +0

    'id_project'を整数として使いたい場合は、自分で設定する必要があります。フレームワークで値を自動的に設定するのは、双方向のマッピング(あなたがやりたいことはありません)を掘り下げた場合にのみ機能します。 – Garima

    関連する問題