app*_*app 4 java postgresql spring-data-jpa spring-boot
我有一个Spring Boot应用程序,它使用连接到PostgreSQL数据库spring-data-jpa,这是我的实体,具有近40个字段
现在将实体保存到数据库中,我只是使用studentRepository.save方法
studentRepository.save(new StudentEntity());
Run Code Online (Sandbox Code Playgroud)
DAO实体
@Table
@Entity
public class StudentEntity {
@Id
@Generate( using database sequenece)
private long studentId;
private String studentName;
private String dept;
private String age;
..
..
}
Run Code Online (Sandbox Code Playgroud)
资料库
public interface StudentRepository implements JPARepository<Long, Student> {
}
Run Code Online (Sandbox Code Playgroud)
但是现在我有一个要求,如果表中有任何学生记录,name并且dept我不应该插入新记录,我知道我可以将PostgreSQL ON CONFLICT与本机查询一起使用,但是如果我使用本机查询,则必须在其中指定所有40个字段查询和作为方法参数看起来很丑陋。
有什么办法可以简化它?
本机查询示例
@Query(value = "insert into Users (name, age, email, status) values (:name, :age, :email, :status)", nativeQuery = true)
void insertUser(@Param("name") String name, @Param("age") Integer age, @Param("status") Integer status, @Param("email") String email);
Run Code Online (Sandbox Code Playgroud)
使用数据库。在2个字段上创建唯一约束,并避免尝试添加多个约束。
就像是
ALTER TABLE StudentEntity ADD CONSTRAINT UQ_NAME_DEPT UNIQUE (studentName,dept);
Run Code Online (Sandbox Code Playgroud)
这种独特的约束将防止插入重复的组合。
您还可以在JPA实体上定义一个约束,以自动创建用于测试的索引
@Table(uniqueConstraints=@UniqueConstraint(columnNames = {"studentName", "dept"})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1102 次 |
| 最近记录: |