我有一个产品对象,它属于某些类别,即经典的多对一关系。
@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或直接查询。
session.load()专门用于此类情况。以下:
Category category = session.load(categoryId); product.setCategory(category);
不会打数据库。但是,如果没有提供给定ID的类别,它将在稍后阶段(刷新期间或多或少)引发异常。
使用load()速度快merge()且没有副作用(级联等)。
load()
merge()