检查是否存在具有指定字段值的数据库对象

时间:2018-10-17 15:38:01

标签: java database spring-data-jpa

我是Spring Data的新手,如果一个实体已经存在且具有相同的字段值,则我需要确定无法在DB中创建一个新的实体。

比较条件:如果新实体的“ closeType”字段和“ id”协议字段等于数据库实体字段,则无法将该实体添加到DB。怎么办?

我的实体:

@Entity
@Table(name = "contract")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Contract implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "contractGenerator")
    @SequenceGenerator(name = "contractGenerator", sequenceName = "contract_sequence")
    private Long id;

    @Column(name = "start_date")
    private LocalDate startDate;

    @Column(name = "end_date")
    private LocalDate endDate;

    @Column(name = "first_pay_date")
    private LocalDate firstPayDate;

    @Column(name = "next_pay_date")
    private LocalDate nextPayDate;

    //Here is thу first field for comparison   
    @Enumerated(EnumType.STRING)
    @Column(name = "close_type")
    private CloseType closeType;

    @ManyToOne
    @JsonIgnoreProperties("")
    private Mentor mentor;

    //Here is second ID agreement field for comparison
    @ManyToOne
    @JsonIgnoreProperties("")
    private Agreement agreement;
     ...............
   //getters and setters

我必须阻止在一项协议(“ id”)中创建多个有效合同(“ closeType”)的可能性

1 个答案:

答案 0 :(得分:0)

  

我必须阻止创建多个活动对象的可能性   一份协议(“ id”)中的合同(“ closeType”)

您可以使用UniqueConstraint How to introduce multi-column constraint with JPA annotations?

...
@Table(uniqueConstraints={
    @UniqueConstraint(columnNames = {"close_type", "agreement"})
}) 
Contract implements Serializable  {
    ...
}
  

谢谢,也许您可​​以提示我如何设置“ closeType”的约束   例如,如果只有具有Null值的closeType字段是唯一的?   但是closeType的其他值不会是唯一的

How to annotate unique constraint with WHERE clause in JPA说:

  

使用JPA创建局部索引(CREATE INDEX ... ON ... WHERE)   JPA未指定。您不能为此使用唯一约束   目的是因为唯一的部分索引不是唯一的约束。   一些JPA提供程序提供特定于该JPA的扩展注释   提供者,这些提供者添加了用于运行本机DDL脚本的功能,   带有注释等的索引。由于您没有提到哪个JPA   您正在使用的提供商,我无法告诉您更多信息。这是文档   用于EclipseLink索引DDL;

我建议您看看 How to annotate unique constraint with WHERE clause in JPA