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

Database spring数据插入(如果不存在)带有字段的实体,database,jpa,spring-data,Database,Jpa,Spring Data,只有当数据库中不存在条目时,有人能推荐一种通过SpringDataJPA(在集群环境中)在数据库表中执行插入的方法吗 例如,以一个包含消息和电子邮件地址表的数据库为例。当新邮件发送至'user@so.com'添加到邮件表中,将在电子邮件地址表中检查电子邮件是否user@so.com'存在于电子邮件地址中,如果不存在,则会添加到数据库中。然后,在消息实体上设置电子邮件地址实体字段,然后保存消息实体 @Entity public class Message { @Id @Gener

只有当数据库中不存在条目时,有人能推荐一种通过SpringDataJPA(在集群环境中)在数据库表中执行插入的方法吗

例如,以一个包含消息和电子邮件地址表的数据库为例。当新邮件发送至'user@so.com'添加到邮件表中,将在电子邮件地址表中检查电子邮件是否user@so.com'存在于电子邮件地址中,如果不存在,则会添加到数据库中。然后,在消息实体上设置电子邮件地址实体字段,然后保存消息实体

@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 data jpa EmailAddressRepository以避免在同时尝试插入具有相同电子邮件地址的实体时可能发生的数据库异常?

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