【发布时间】:2019-08-16 09:29:31
【问题描述】:
我有使用 spring-data-jpa 与 PostgreSQL 数据库连接的 Spring Boot 应用程序,这是我的实体,有近 40 个字段
现在为了将实体保存到数据库中,我只是使用studentRepository.save 方法
studentRepository.save(new StudentEntity());
DAO 实体
@Table
@Entity
public class StudentEntity {
@Id
@Generate( using database sequenece)
private long studentId;
private String studentName;
private String dept;
private String age;
..
..
}
存储库
public interface StudentRepository implements JPARepository<Long, Student> {
}
但是现在我有一个要求,如果表中有 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);
【问题讨论】:
-
声明这些属性的唯一索引,无条件插入,并捕获/翻译抛出的异常?
-
我不确定先生您在解释什么@chrylis
-
我们遇到了类似的问题,我不得不使用 MYSQL 数据库特有的“ON DUPLICATE KEY”功能。最初我们继续使用 @Query,但不可读。因此,我们搜索并发现JOOQ 是此类情况的合适替代方案。
-
您能否为上述场景提供一个示例,以及如何集成该示例?
标签: java postgresql spring-boot spring-data-jpa