我有一个“document”字段,它需要是主键并且必须是唯一的,但是每次我对同一个文档执行POST时,它都会更新文档,并且不会发送BAD_REQUEST
我的实体:
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"document"})})
public class Cliente {
@Id
@Column(unique=true, updatable = false)
@NotBlank @NotNull
private String document;
@NotBlank
private String name;
@NotNull
private LocalDateTime date;
}
当我尝试用同一个文档进行新的POST时,它只会更新保存在数据库中的内容。
“休眠:更新客户端设置日期=?,名称=?,其中文档=?"
1条答案
按热度按时间dwbf0jvd1#
问题在于,当您调用
Repository#save
时,SpringDataJPA假设您希望在传入的实体对象具有id属性集时更新现有的实体。如果您希望确保Hibernate尝试执行插入操作,则必须在代码中注入EntityManager
,而不是调用EntityManager#persist
,在这种情况下,您将得到一个约束冲突异常,正如您所期望。