我有这样的JPA库:为什么JpaRepository没有更新我的实体?
public interface BalanceRepository extends JpaRepository<Balance, Long> {
}
据我所知(这answer这确认)实体管理器插入新记录(当实体是新的)和更新实体记录是不是新的时候。
我的实体类层次结构:
@Entity
@Table(name = "balances")
public class Balance extends BaseEntity {
// omitted
}
和BaseEntity
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties({"handler", "hibernateLazyInitializer"})
public abstract class BaseEntity {
private static Logger LOGGER = LogManager.getLogger(BaseEntity.class);
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false, nullable = false)
@JsonProperty("id")
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public boolean isNew() {
return id == null;
}
}
当我保存新Balance
实体,插入新记录,但不更新完成后,为什么呢?
Balance bal = new Balance();
bal.setFinalBalance(BigDecimal.TEN);
bal.setUser(user);
bal.setRecordDate(date);
bal.setMinusBalance(BigDecimal.TEN);
bal.setPlusBalance(BigDecimal.TEN);
bal.setTotalBalance(BigDecimal.TEN);
// entity is inserted
balanceRepository.save(bal);
// no update...
bal.setFinalBalance(bal.getFinalBalance().add(BigDecimal.TEN));
balanceRepository.save(bal);
更新1 - 当我findOne(Long id)
更新的记录,价值似乎被更新,但在数据库中的值不会改变。
是否真的在数据库中没有更新?合并操作不会更新您传递的实体,但会返回一个新的实体 – Deltharis
真的,数据库表中没有更新...(我用'spring.jpa.show-sql = true'写出查询) – Artegon
您是否尝试过做一个实体Mananger。更新后刷新()? JPA缓存数据库请求并稍后刷新它们(在事务结束后)......只要您在单个节点/应用程序上使用jpa,那么这是没有问题的...... – Anton