Java Spring JPA:在数据库中保存实体对象

Java Spring JPA:在数据库中保存实体对象,java,spring,hibernate,spring-data-jpa,persistence,Java,Spring,Hibernate,Spring Data Jpa,Persistence,我有一个实体CandidateTransaction和CandidateTransaction存储库扩展CrudRepository @Repository public interface CandidateTransactionRepository extends CrudRepository<CandidateTransaction,Long>{ //find methods } @Entity @Table(name = "ONB_CANDIDAT

我有一个实体CandidateTransactionCandidateTransaction存储库扩展CrudRepository

@Repository
public interface CandidateTransactionRepository extends CrudRepository<CandidateTransaction,Long>{
  //find methods 


}

    @Entity
    @Table(name = "ONB_CANDIDATE_TRANS")
    public class CandidateTransaction implements Serializable {

        private static final long serialVersionUID = 3615632069112078119L;

        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Integer ID;
//other columns
如果我必须保存同一实体的集合,该怎么办

理想情况下,它应该处理这种情况,但在我的情况下,我必须特别检查具有特定值的行是否存在,如果存在,则在现有对象中设置更新的值,然后保存它

主键(属性“ID”)在表中是唯一的。如果实体在保存()时没有设置主键(
ID
null
),则Crudepository将认为该实体以前未保存,并在数据库中创建新行

保存前查找的技巧非常常见。您通常使用finder方法(
crudepository.findByPROPERTYNAME(…)
)通过实体的其他属性/列查找实体。finder方法返回的实体将具有非空的
ID

如果我必须保存同一实体的集合,该怎么办


是您的最佳选择,因为集合是一个Iterable,正如方法要求作为参数一样。

当您仅保存实体时会发生什么?@Jenschauder我在表中有一个唯一键列,如果该行存在,则它会显示唯一键约束错误,但它应该更新该行。为此,我必须首先获取行,然后调用save。传统方式。
ID
设置了吗?它有吸气剂吗?如果没有,请添加一个getter或使字段非私有。@Jenschauder getter在那里,但字段是私有的。我会尝试让它成为非私人的,如果有人在场,那就足够了。将
ID
重命名为
ID
,并确保getter的名称为
getId()
if (candidateTransactionRepository.existsByCandidateIdAndTransactionType(candidateId, transactionType))
                candidate = candidateTransactionRepository.findByCandidateIdAndTransactionType(candidateId,transactionType);

            candidate = prepareTransactionProgressObjectToSave(candidateId, transactionType, transactionStatus);

            savedInstance = candidateTransactionRepository.save(candidate);