我有這樣的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