Flex+Hbernaneはカスケード操作の解決策ができません.
本論文の最初のリリースは
http://www.lovestblog.cn、転載は出典を明記してください.ご協力ありがとうございます.
最近は忙しいプロジェクトで、Flex+Spring+Hbergを使っています.その間に問題がありました.ここで記録する必要があります.似たような問題がある来た方も参考にしてください.
問題の説明:ユーザーテーブルとユーザー詳細テーブルがあります.この二つのテーブルは一対の一方向関連関係です.つまり、ユーザーテーブルの外部キーでユーザー詳細表を引用しています.私はUserInfoのマッピングファイルでマンツーを使用しています.unique="true"テーブルのペアを設定しています.cascade="savedate"は、useInfoオブジェクトを保存する際に自動的に関連するuserDetailsの一時的なオブジェクトを保存します.つまり、ユーザーの詳細テーブルに挿入されたステートメントを実行してから、ユーザーテーブルに挿入されたステートメントを実行したいです.userInfoオブジェクトはflexから送られてきたものです.もちろん、userDetails属性の値も設定されています.userInfoのdaoファイルに保存する方法はこうです.
問題解決:この問題はHibernateのソースコードを具体的に研究していません.まずテストクラスを書いてみました.Javaで操作すれば、正しい挿入文が2つ実行できます.しかし、flexを通じて伝えられたら問題があります.flex側からパラメータが来たということです.そこで、UserInfoのsave方法を変更してみます.
友達が具体的な原因を知っているなら、メッセージを送ってほしいです.そしてこの記録がこのような問題にあった友達を助けてくれることを願っています.
http://www.lovestblog.cn、転載は出典を明記してください.ご協力ありがとうございます.
最近は忙しいプロジェクトで、Flex+Spring+Hbergを使っています.その間に問題がありました.ここで記録する必要があります.似たような問題がある来た方も参考にしてください.
問題の説明:ユーザーテーブルとユーザー詳細テーブルがあります.この二つのテーブルは一対の一方向関連関係です.つまり、ユーザーテーブルの外部キーでユーザー詳細表を引用しています.私はUserInfoのマッピングファイルでマンツーを使用しています.unique="true"テーブルのペアを設定しています.cascade="savedate"は、useInfoオブジェクトを保存する際に自動的に関連するuserDetailsの一時的なオブジェクトを保存します.つまり、ユーザーの詳細テーブルに挿入されたステートメントを実行してから、ユーザーテーブルに挿入されたステートメントを実行したいです.userInfoオブジェクトはflexから送られてきたものです.もちろん、userDetails属性の値も設定されています.userInfoのdaoファイルに保存する方法はこうです.
public IvUserInfo save(IvUserInfo transientInstance) {
log.debug("saving IvUserInfo instance");
try {
getHibernateTemplate().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
return transientInstance;
}
後に実行されているsql文は一つの挿入文しかないことが分かりました.つまり、ユーザーテーブルの中の一つの挿入です.外部キーの関連作用により、ユーザーテーブルのこの挿入も実行できなくなりました.これは問題があります.問題解決:この問題はHibernateのソースコードを具体的に研究していません.まずテストクラスを書いてみました.Javaで操作すれば、正しい挿入文が2つ実行できます.しかし、flexを通じて伝えられたら問題があります.flex側からパラメータが来たということです.そこで、UserInfoのsave方法を変更してみます.
public IvUserInfo save(IvUserInfo transientInstance) {
log.debug("saving IvUserInfo instance");
try {
IvUserDetails ud=new IvUserDetails();
ud.setQq(transientInstance.getIvUserDetails().getQq());
transientInstance.setIvUserDetails(ud);
getHibernateTemplate().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
return transientInstance;
}
これで問題が解決し、挿入文を2つ実行しました.友達が具体的な原因を知っているなら、メッセージを送ってほしいです.そしてこの記録がこのような問題にあった友達を助けてくれることを願っています.