当前位置: 首页 > 知识库问答 >
问题:

使用spring data jpa强制插入

胡云瀚
2023-03-14

我希望强制CrudRepository#save(entity)插入一个新实体,而不是先选择实体,然后在主键已经存在的情况下更新它。

public class Lock
{
    @Id
    @Column
    private UUID uuid;
    ...
}


UUID id = UUID.randomUUID();
Lock firstLock = new Lock(id);
Lock secondLock = new Lock(id);
repo.save(firstLock);
repo.save(secondLock);
Hibernate: select lock0_.uuid as uuid5_0_, lock0_.expires as expires5_0_ from locks lock0_ where lock0_.uuid=?
Hibernate: insert into locks (expires, uuid) values (?, ?)
Hibernate: select lock0_.uuid as uuid5_0_, lock0_.expires as expires5_0_ from locks lock0_ where lock0_.uuid=?
Hibernate: update locks set expires=? where uuid=?

共有1个答案

钱嘉致
2023-03-14

Spring Data JPA中不允许对id不为空的实体强制插入。

通常,Id生成器用于主键,以确保生成的Id是唯一的。(例如@generatedvalue(strategy=generationtype.auto))

这种行为在我看来是正确的。在ORM中,使用new运算符表示打算创建一个新实体,并隐含地要求为其分配唯一的ID。

但是如果您想尝试它,您可以查看一个自定义的@GenericGenerator。

http://www.georgestragand.com/jpaseq.html

 类似资料:
  • 我看到这篇文章给出了使用WebClient将文件上传到ftp的简单想法。这很简单,但如何强制它使用SSL?

  • 问题内容: 我正在将Maven与“ Eclipse Kepler JavaEE”结合使用。我在’maven-compiler-plugin’中有这样的内容: 每次我更改“ pom.xml”中的内容时,eclipse都会强制我执行“ Maven->更新项目”,然后将项目设置更改为使用JRE而不是JDK,并且某些maven构建停止工作。 我发现解决此问题的唯一方法是设置如何设置eclipse / m2

  • 问题内容: 我们正在与第三方进行集成,该第三方发送的XML的Content-Type标头为text / html。我们正计划使用Spring的RestTemplate将其映射到我们从xsds生成的类,但是RestTemplate无法找到合适的转换器用于内容。第三方拒绝修复内容类型,因为它可能破坏其他伙伴的集成。 Spring的RestTemplate是否有办法强制其使用特定的转换器?我们基本上只是

  • 问题内容: 我正在运行没有代理并且使用SSL的node.js express 3服务器。 我试图弄清楚如何强制所有连接通过https。 Google搜索向我显示了这一点: https://groups.google.com/forum/#!topic/express- js/Bm6yozgoDSY 当前没有办法强制执行https重定向,尽管这似乎有点奇怪。我们有一个仅使用https的应用程序,并且

  • 我们正在与第三方集成,该第三方以text/html的形式发送带有content-type标题的xml。我们计划使用Spring的RestTemplate将其映射到我们从xsds生成的类,但是RestTemplate未能为内容找到合适的转换器。第三方拒绝修复内容类型,因为这可能会破坏其他合作伙伴的集成。 Spring的RestTemplate有办法强制它使用特定的转换器吗?我们基本上只是在做以下几点

  • 有没有强制slf4j使用特定的日志提供程序(在我的情况下是logback)?如在其文件中所述: 在类路径上找到多个绑定 我想要的只是通过JVM参数强制slf4j使用logback,例如,这样它就可以打印警告,并且我可以在将来排除JAR。