2011-07-11 12 views
1

私はHibernateで作業しています。私はそれらの間の関係ですが、3つのエンティティを得た:Hibernate関係を使って作業する

ユーザー1 - 私はテーブル内の行を追加することができますどのように> N注文詳細

与えられたため、特定の順序の「注文の詳細」 - > N受注1ユーザー?

私は、テーブルの受注と受注明細に新しい行を追加する方法をそのような何かを知っている:それは正しいです

User user=(User)session.get(User.class, username); 
Order order=new Order(); 
OrderDetails orderDetails=new OrderDetails(); 
orderDetails.setAmount(1); 
order.addOrderDetails(orderDetails); 
user.addOrder(order); 
session.save(user); 
transaction.commit(); 

を?

しかし、特定のユーザーの特定のOrderのaddOrderDetailsテーブルに行を追加するだけの場合はどうなりますか?私はこれを行うことができますか?

List<Order> o=session.createCriteria(Order.class) 
.add(Restrictions.eq("idUser", User)); 
o.get(0).addOrderDetails(orderDetails); 

実際に私はテーブルの注文と注文の詳細を操作する方法がわからないので、私はUserテーブルから行うべきですか?どうやって?ユーザーテーブルの条件を使用すると、ユーザーの一覧しか取得できませんが、他のテーブルは使用できません。あなたがあなたの関係を表したマッピングを使用している場合は

おかげ

答えて

0

は、あなたがユーザーを取得することができますし、ユーザーがタイプ注文の要素を持つ集合またはリストを持っているでしょう。その後、特定の注文を更新することができます。

あなたが記述した方法も間違いがない限り正確です(例:リストを取得する基準についてはlist()を呼び出してください)。

0

ユーザーが多くのリソースを所有している可能性があるため、ユーザーオブジェクトから注文にアクセスすると、パフォーマンスに影響する可能性があります。

// user.addOrder(order); 
// session.save(user); 
order.setUser(user); 
session.save(order); 

また、ユーザークラスからordersプロパティを削除すると、デザインがクリーンアップされます。しかし、再びそれはビジネスモデルに依存します。