私は、このような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)
更新されたレコード、値が更新されるようだが、データベース内の値が変更されていない場合。
が本当にデータベースには更新がありません: また
Persistable
インタフェースを実装し、@Version
注釈を追加し、このようにそれを使用するようにトライすることができますか?マージ操作で渡したエンティティは更新されませんが、新しいものが返されます – Deltharis本当に、データベーステーブルの更新はありません。(私は 'spring.jpa.show-sql = true'でクエリを書きます) – Artegon
エンティティを行うMananger。更新後にflush()を実行しますか? JPAはデータベースリクエストをキャッシュし、後で(トランザクションが終了した後)ただちにフラッシュします...単一ノード/アプリケーションでjpaを使用している限り問題ありません。 – Anton