私はSpring 3 + Hibernateを使用していますが、@ManyToManyの関係で互いに関連する2つのエンティティ(User、Address)があります。すべてのエンティティはテーブル( 'user'と 'address')にマッピングされ、関係はuser_idとaddress_idをマッピングするリンクテーブル 'user_address'によって定義されます。Spring + Hibernate:多対多関係のデータの保存とフェッチ
私は、新しいアドレスが追加された「ユーザーズ節約「method1に」持っている:
@Transactional
public Address method2 (Long userId, String streetName) {
String hql = "select distinct a from Address a " +
"join a.users u " +
"where u.id=:id and a.name=:name";
Query query = session.createQuery(hql);
query.setParameterList("id", userId);
query.setParameterList("name", streetName);
Address address = query.uniqueResult();
return address;
}
:私は、特定のユーザーの街路によるアドレスを取得する必要があり、別法2で
@Transactional
public void method1 (...) {
/* do something*/
user.getAddresses().add(address);
session.save(user);
}
を
この問題は、method1経由で新しいアドレスが追加されたときに、method2が実行されたときに(アドレスが返されないので)、method2がデータベースにヒットしたときキャッシュ)。 私が見つけた唯一の解決策は、method1の後に "flush"を追加することですが、本当に好きではありません。あなたはより良い方法を知っていますか?
ユーザ/アドレス注釈でカスケードがどのように宣言されていますか? –
私はcascade = "all"を使用しています – Randomize