当前位置: 首页 > 面试题库 >

Hibernate,插入或更新时不选择

晁国发
2023-03-14
问题内容

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

@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()且没有副作用(级联等)。



 类似资料:
  • 问题内容: 我需要从每日CSV文件中消耗大量数据。CSV包含约12万条记录。使用hibernate模式时,这会减慢爬行速度。基本上,当使用saveOrUpdate()时,hibernate似乎在每个单独的INSERT(或UPDATE)之前执行SELECT。对于使用saveOrUpdate()持久存储的每个实例,在实际的INSERT或UPDATE之前发出SELECT。我能理解为什么要这样做,但是在进

  • 我需要在我的MySQL数据库中进行批量插入(近10000个)。我正在使用JPA/Hibernate和spring Boot。我从hibernate文档中读到了在hibernate中执行大容量插入/更新,我认为我的代码不能正常工作,因为它顺序地插入hibernate查询,而不是在批处理插入中执行它们。下面是我的代码。我是不是漏掉了什么? 这是我的数据源配置。 我是不是漏掉了什么? 请帮帮忙。

  • 我有一个表,有多条记录具有相同的ID但不同的值。我想从其他表复制记录到这个表。如果记录为空,我想更新到最小位置,或者如果值不存在,插入到下一个位置。 这是我的目标表: ID|职位|价值 1 | 1 | A 2 | 1 | B 2 | 2 |空 2 | 3 |空 2 | 4 | C 3 | 1 | A 4 | 1 | D 4 | 2 | B 源表: ID |值 1 | C 2|N 3 | B 4 |

  • 问题内容: 显然,以下是不正确的。 我得到的价值: SQL查询: MySQL说: 1093-您无法在FROM子句中指定目标表’aTable’用于更新 因此,我试图制作一个位图表,每一行对应一个位,并具有一个“ map”值。 要插入表中,我不想执行两个查询,而是想执行一个查询。我应该怎么做? 没有人对此发表评论,但是由于我正在尝试制作位图,因此应该是* 2而不是^ 2,是我的错误,请注意,这就是为什

  • 问题内容: 有没有办法像在MySQL服务器上那样批量执行查询? 将无法使用,因为如果该字段已经存在,它将直接忽略该字段并且不插入任何内容。 将无法工作,因为如果该字段已经存在,它将首先对其进行处理,然后再次进行处理,而不是对其进行更新。 可以使用,但不能批量使用。 因此,我想知道是否可以批量发出这样的命令(一次不止一次发送)。 问题答案: 您 可以 使用INSERT … ON DUPLICATE

  • 问题内容: 我正在执行插入查询,其中如果已经存在唯一键,则许多列中的大多数都需要更新为新值。它是这样的: 我不确定该子句的语法应该是什么。如何从子句引用当前行? 问题答案: MySQL将假定等号之前的部分引用INSERT INTO子句中命名的列,而第二部分引用SELECT列。