私は特定のカテゴリ、すなわち古典的な多対1の関係に属する製品オブジェクトを持っています。選択せずに休止、挿入または更新
@Entity
public class Product{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
String name;
Double price;
@ManyToOne(fetch = FetchType.LAZY)
Category category;
...
}
@Entity
public class Category implements Identifiable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
...
}
カテゴリを事前に選択せずに商品を挿入して更新したいと考えています。このように:
Product product = dao.get(productId);
Category category = dao.get(categoryId);
product.setCategory(category);
dao.update(product);
または
Product product = new Product(somename);
Category category = dao.get(categoryId);
product.setCategory(category);
dao.insert(product);
それが更新およびカテゴリ選択せずに挿入することは可能ですか?私はそのためにHQLやダイレクトクエリーを使用したくありません。
このアプローチの問題は、同じ識別子を持つ永続エンティティの新しいインスタンスを作成することです。これは、問題の「カテゴリ」が**現在**セッションに関連していなかったため、今度はあなたのために働いたかもしれません。そうであれば、Hibernateは例外をスローします。データの完全性の点でも危険です。 'category'に多対1のカスケードを指定した場合、上記のコードは元のカテゴリをすべての空白の値で上書きします(または制約違反エラーで失敗します)。 – ChssPly76
Hm、私はやっているという感覚を持っていましたここでは厄介なもの。明確化のためにありがとう。 – Vladimir