Tôi có một đối tượng sản phẩm thuộc về một số danh mục nhất định, nghĩa là mối quan hệ nhiều cổ điển với một.Hibernate, chèn hoặc cập nhật mà không chọn
@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;
...
}
Tôi muốn chèn và cập nhật sản phẩm mà không cần chọn trước danh mục. Như thế này:
Product product = dao.get(productId);
Category category = dao.get(categoryId);
product.setCategory(category);
dao.update(product);
hoặc
Product product = new Product(somename);
Category category = dao.get(categoryId);
product.setCategory(category);
dao.insert(product);
Có thể cập nhật và chèn mà không loại lựa chọn? Tôi không muốn sử dụng HQL hoặc truy vấn trực tiếp cho điều đó.
Vấn đề với cách tiếp cận này là bạn đang tạo một thể hiện mới của thực thể liên tục với cùng một số nhận dạng. Nó có thể đã làm việc cho bạn lần này bởi vì 'Danh mục' được đề cập không liên quan đến phiên ** hiện tại **; nếu có, Hibernate sẽ ném một ngoại lệ. Nó cũng nguy hiểm về tính toàn vẹn dữ liệu; nếu bạn chỉ định xếp tầng cho nhiều người trên danh mục ', mã trên sẽ ghi đè danh mục gốc của bạn với tất cả các giá trị trống (hoặc không có lỗi vi phạm ràng buộc) – ChssPly76
Hm, tôi có ý nghĩa rằng tôi đang làm một cái gì đó khó chịu ở đây. Cảm ơn bạn đã làm rõ. – Vladimir