我使用春季靴子。
执行时
oneJpaRepository.save(object)如果不存在主键,则此对象保存它,如果它存在,则更新该对象。
如何通过不是主键的其他属性更新此对象?例如 oneJpaRepository.saveByCodigo(对象)
注意:我已经创建了一个函数updateObjectByOtherAtributte并且它可以工作,但我想知道是否有办法通过
来实现它@Transactional
@Modifying(clearAutomatically = true)
@Query("UPDATE Concepto c SET c.idBui = :#{#concepto.getIdBui()}," +
"c.descripcion = :#{#concepto.getDescripcion()}," +
"c.admiteReglas = :#{#concepto.getAdmiteReglas()}," +
"c.tieneCantidadFija = :#{#concepto.getTieneCantidadFija()}," +
"c.tieneValorFijo = :#{#concepto.getTieneValorFijo()}," +
"c.vigencia = :#{#concepto.getVigencia()}," +
"c.valor = :#{#concepto.getValor()}, " +
"c.detalles = :#{#concepto.getDetalles()}" +
" WHERE c.codigo = :#{#concepto.getCodigo()}")
int updateConcepto(@Param("concepto") Concepto concepto);
int resultadoUpdate = conceptoJpaRepository.updateConcepto(concepto);
if (resultadoUpdate == 0){ conceptoJpaRepository.save(concepto)
答案 0 :(得分:0)
如果在对象位于事务上下文中时对一个属性进行修改,则将更新该对象。
您不需要调用oneJpaRepository.save()来更新对象,您只需要修改事务中的对象
通常在spring应用程序中,您有一个声明事务的图层服务,在此图层中,您可以检索对象并设置新值。它是这样的
@Transactional
void serviceMethod (Object c){
Object bd = oneJpaRepository.findById(c.id)
bd.setFoo(c.getFoo)
}
答案 1 :(得分:0)
当使用JPA作为持久性机制时,没有必要调用对象的保存,其中您希望保存的更改是在事务内部进行的(更改是在tranasaction开始之后和transacton结束之前进行的)。
这是由于JPA的行为称为Transparent Persistence。
使用Spring Data JPA时的save方法将确定对象是否是新对象,如果是new则会使对象持久化(即在数据库上创建对象)。