我如何检查记录是否已存在于 spring boot JPA 的 table 中?
How do i check if a record already exists in table in springboot JPA?
我有一个包含 4 个字段的 table。如果我插入了一条已经存在的记录,即所有字段值都与 table 中的先前记录相匹配。我如何 return 只记录而不插入数据库?
我的模型是这样的:
@Entity
public class QuestionDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String department;
private String year;
private String academic_year;
private String semester;
private String type;
private String subject;
private int points;
private int unit;
// getter, setter
控制器看起来是这样的:
@Autowired
public QuestionDetailsRepository qdRepository;
@PostMapping("/api/questionDetails")
public QuestionDetails addQuestion(@Valid @RequestBody QuestionDetails qDetails) {
// here i want to first check if qDetails object is already present in table .
If present i want to return that existed record instead of inserting into table.
QuestionDetails qd = qdRepository.save(qDetails); // save only new record
return qd;
}
使用邮递员我发送这样的数据:
{
"department" : "IT",
"year" : "2020",
"academic_year" : "1st year",
"semester" : "first semester",
"type" : "objective",
"subject" : "JAVA",
"points" : 10,
"unit" : 5
}
在这里,我发送的数据已经存在于 table 中。所以,我想检查这条记录是否已经存在?如果不存在则插入 table 否则 return 存在的记录。
如何使用 springboot Jpa hibernate 实现?
在 QuestionDetailsRepository
中实现一个 select 方法,如下所示。添加使记录唯一的所有条件。我使用的是部门和年份,但您可以使用 QuestionDetails
实体的所有参数。
@Query("select qd from QuestionDetails qd where qd.department = :#{#req. department} and qd.year = :#{#req.year}")
Optional<QuestionDetails> findQuestionDetails(@Param("req") QuestionDetails req);
确保根据唯一标准在 QuestionDetails
class 中实施 equals()
和 hashCode()
。
您的伪代码如下所示:
Optinal<QuestionDetails> optRecord = qdRepository.findQuestionDetails(qDetails);
if(opt.isPresent()){
return opt.get();
}else{
qdRepository.save(qDetails);
}
我有一个包含 4 个字段的 table。如果我插入了一条已经存在的记录,即所有字段值都与 table 中的先前记录相匹配。我如何 return 只记录而不插入数据库?
我的模型是这样的:
@Entity
public class QuestionDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String department;
private String year;
private String academic_year;
private String semester;
private String type;
private String subject;
private int points;
private int unit;
// getter, setter
控制器看起来是这样的:
@Autowired
public QuestionDetailsRepository qdRepository;
@PostMapping("/api/questionDetails")
public QuestionDetails addQuestion(@Valid @RequestBody QuestionDetails qDetails) {
// here i want to first check if qDetails object is already present in table .
If present i want to return that existed record instead of inserting into table.
QuestionDetails qd = qdRepository.save(qDetails); // save only new record
return qd;
}
使用邮递员我发送这样的数据:
{
"department" : "IT",
"year" : "2020",
"academic_year" : "1st year",
"semester" : "first semester",
"type" : "objective",
"subject" : "JAVA",
"points" : 10,
"unit" : 5
}
在这里,我发送的数据已经存在于 table 中。所以,我想检查这条记录是否已经存在?如果不存在则插入 table 否则 return 存在的记录。
如何使用 springboot Jpa hibernate 实现?
在 QuestionDetailsRepository
中实现一个 select 方法,如下所示。添加使记录唯一的所有条件。我使用的是部门和年份,但您可以使用 QuestionDetails
实体的所有参数。
@Query("select qd from QuestionDetails qd where qd.department = :#{#req. department} and qd.year = :#{#req.year}")
Optional<QuestionDetails> findQuestionDetails(@Param("req") QuestionDetails req);
确保根据唯一标准在 QuestionDetails
class 中实施 equals()
和 hashCode()
。
您的伪代码如下所示:
Optinal<QuestionDetails> optRecord = qdRepository.findQuestionDetails(qDetails);
if(opt.isPresent()){
return opt.get();
}else{
qdRepository.save(qDetails);
}