弹簧数据插入如果不存在实体与字段

时间:2015-11-22 10:32:31

标签: database jpa spring-data

任何人都可以推荐一种方法,只有当数据库中尚不存在该条目时,才能通过spring data 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 data jpa EmailAddressRepository来避免在同时尝试插入具有相同电子邮件地址的实体时可能发生的数据库异常?

1 个答案:

答案 0 :(得分:0)

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