我是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”)的可能性
答案 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