一尘不染

Hibernate,插入或更新时不选择

hibernate

我有一个产品对象,它属于某些类别,即经典的多对一关系。

@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或直接查询。


阅读 193

收藏
2020-06-20

共1个答案

一尘不染

session.load()专门用于此类情况。以下:

Category category = session.load(categoryId);
product.setCategory(category);

不会打数据库。但是,如果没有提供给定ID的类别,它将在稍后阶段(刷新期间或多或少)引发异常。

使用load()速度快merge()且没有副作用(级联等)。

2020-06-20