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

Spring数据插入(如果不存在)带有字段的实体

乜嘉悦
2023-03-14

有谁能推荐一种仅当数据库中不存在条目时才通过spring数据jpa(在集群环境中)在数据库表中执行插入的方法吗?

例如,以带有消息和email_address表的数据库为例。当发往“user@so.com”的新消息添加到消息表中时,将在email_address表中检查电子邮件“user@so.com”是否存在于email_address中,如果不存在,则将其添加到数据库中。之后,在消息实体上设置电子邮件地址实体字段,随后保存消息实体。

@Entity
public class Message {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;


    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private EmailAddress emailAddress;   

    private String content;

}


@Entity
public class EmailAddress {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;

    // a unique constraint exists on this field on the database
    private String email;
}

如何处理spring数据jpa EmailAddressRepository,以避免在同时尝试插入具有相同电子邮件地址的实体时出现数据库异常?

共有1个答案

裴劲
2023-03-14

您可以在实体中的@PrePersist注释方法内运行检查。除此之外,我不认为JPA或spring数据提供了现成的东西。

 类似资料:
  • 我遇到了jOOQ不插入实体的问题,除非存储库用@Transactional注释。 这是我的配置: 存储库: 因此,调用userRepository。插入(…) 实际上并没有插入到数据库中,尽管日志显示以下内容: 但是,如果我重载User道的插入方法并用@Transacational-it works注释它,实际上会插入行。我想我配置错误了一些东西。 使用带有jOOQ启动启动器的Spring Boo

  • 问题内容: 是否有只查询记录的查询,如果不存在,则插入?我不想重复更新或替换。寻找一个查询解决方案,寻找其他答案,但不是我真正想要的。 表: 伪查询: 问题答案: 使用-与INSERT完全相同,不同之处在于,如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前会删除该旧行。 http://dev.mysql.com/doc/refman/5.0/en/rep

  • 问题内容: 我在使用SQL查询时遇到问题。如果同一行尚不存在,我需要插入一行。这是我到目前为止的内容: 我对sql不太熟悉,尤其是不存在的语法,因此在执行时会出现以下错误: ORA-06550:第37行,第11列:PLS-00103:在预期以下情况之一时遇到了符号“ INSERT”: 然后和或 用“ then”符号代替“ INSERT”继续。 following: the following: 问

  • 问题内容: 我想初始化一个H2数据库,但是我不确定记录是否存在。如果它们不存在,我什么都不愿做,但是如果它们不存在,我想写默认值。 像这样的东西: 问题答案: 以下内容适用于MySQL,PostgreSQL和H2数据库:

  • 问题内容: 我有下表: 如果给定的ID不存在,我想插入具有默认Val的ID。但是,如果它已经存在,我想增加Val的值。 我有以下代码: 并且它可以工作,但是我想用一个SQL语句来完成。我可以吗? 编辑 : 从@ Xikinho90的答案,我的最终代码是 问题答案: 您可以使用插入或替换。 我认为这可以解决问题 您只需要用输入的ID替换数字 谢谢奇科

  • 问题内容: 我有一个带有2个表的数据库,如下所示: 列是,并且是 和 在申请表中,我有2个编辑框,名称分别为和 如果用户像电子邮件一样插入一个新的负责人姓名, 那么在保存表格的过程中,我想将新的负责人姓名插入表中,请插入最后一个并将其更新为。 如果用户保持名称,但它更新电子邮件一样,然后我想在从1 =使用新的电子邮件地址和他们(其余和)保持不变。 如果负责人的名称相同,我想保留from表的原始引用