1

Spring+Hibernate+MS SQL を使用して Web アプリケーションを開発していて、奇妙な症状に遭遇しました。

Aフィールド参照 ( FK) 別の子オブジェクトを持つ親オブジェクトがありますB。にA、注釈があります

@ManyToOne(cascade={CascadeType.PERSIST, CascadeType.MERGE}, fetch=FetchType.EAGER)

私が呼び出すSession.SaveOrUpdateときA。1 つのケースを除いて、すべてが正常に機能Bし、同様に永続化されます。

id fieldテーブル B の (主キーである) が 0 の場合、例外が発生します。

オブジェクトは保存されていない一時的なインスタンスを参照しています...

ゼロでない場合は、すべて問題ありません。

ほとんどの人が「オブジェクトは保存されていない一時的なインスタンスを参照しています...」という例外について提案したように、注釈を次のように変更しようとしました

@ManyToOne(cascade={CascadeType.ALL}, fetch=FetchType.EAGER). 

次に、別のエラーが表示されますPrimary key cannot be NULL...

この問題に関するコメントや説明はありますか? あなたの助けは大歓迎です!!

4

1 に答える 1

0

ケンさん、お返事ありがとうございます。A を次のようにマッピングします。

@Entity
@Table(name="TableA")
public class TableA implements Serializable {
.....
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch=FetchType.EAGER)
@JoinColumn(name="B_id")
public TableB  getB_id() {      
    return this.b_id;
}
public void setB_id(TableB  p) {        
    this.b_id= p;
}
...
}

および B は次のとおりです。

Entity
@Table(name="TableB")
public class TableB implements Serializable {
private int B_id;
private String B_name;
private String B_desc;

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="B_id")    
public int getB_id()
{
    return this.B_id;
}
public void setB_id(int id)
{
    this.B_id = id;
}

@Column(name="B_name")
public String B_name()
{
    return this.B_name;
}
}

session.SaveOrUpdate(a) を呼び出す前に、私は持っています:

TableA tempA = aDao.getA(id); 
TableB tempB =bDao.getB(0);
tempA.setB_id(tempB);
session.SaveOrUpdate(tempA);
于 2012-10-11T18:04:02.287 に答える