Java Spring JPA:在数据库中保存实体对象
我有一个实体CandidateTransaction和CandidateTransaction存储库扩展CrudRepositoryJava 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
@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);