0

3つのテーブルがあります。メインテーブルMAIN_TBとテーブルTCHARSおよびTSTATUSESへの外部キーがあります。MAIN_TBを永続化し、保存されたレコードを再クエリして表示すると、結合された列(TCHARSのtcharsとTSTATUSESのt_status)はnullになりますが、データは保存されます。 。何が欠けている可能性がありますか?

テーブルMAIN_TB

@JoinColumn(name = "T_STATUS", referencedColumnName = "T_STATUS")
@ManyToOne
private Tstatuses tStatus;

@JoinColumn(name = "T_CHAR", referencedColumnName = "T_CHAR")
@ManyToOne
private Tchars tChar;

テーブルTCHARS

@OneToMany(mappedBy = "tChar")
private Collection<MainTb> mainTbCollection;

テーブルのステータス

@OneToMany(mappedBy = "tStatus")
private Collection<MainTb> mainTbCollection;

コード

 public void saveMainTb(){
     MainTb mainTb = new MainTb();
     Tchars tchars = new Tchars();
     Tstatuses tstatuses = new Tstatuses();

     tchars.setTChar(new Short("1"));
     mainTb.setTChar(tchars);

     tstatuses.setTStatus(new Short("1"));
     mainTb.setTStatus(tstatuses);

     mainTb.setTName("test");
     em.persist(mainTb);

 }

結果

 ![Result][1]

どんな助けでもいただければ幸いです

4

2 に答える 2

0

以下のコードをtStatustCharに追加できます。

fetch=FetchType.EAGER

上記の2つのオブジェクトを常にフェッチする必要がない場合、これはパフォーマンスに影響します。

代わりに、fetchクエリに句を追加して、オブジェクトとともに2つの子オブジェクト(tStatustChar)をフェッチできmainTbます。fetchこれにより、手間が省け、句で指定したすべての子オブジェクトがフェッチされます。パフォーマンスオプティマイザ。

于 2013-02-18T09:46:23.193 に答える
0

所有側または逆側のどちらにもカスケードが指定されていないためです。次のコードを試して、すべてのエンティティインスタンスを手動で保存できると思います。

em.persist(tchars);
em.persist(tstatuses);
mainTb.setTChar(tchars);
mainTb.setTStatus(tstatuses);
em.persist(mainTb);
于 2013-02-18T09:41:36.693 に答える