gpt4 book ai didi

java - 为什么 JpaRepository 不更新我的实体?

转载 作者:行者123 更新时间:2023-12-01 18:39:18 25 4
gpt4 key购买 nike

我有这样的 Jpa 存储库:

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)更新记录时,值似乎已更新,但数据库中的值未更改。

最佳答案

尝试设置“bal = BalanceRepository.save(bal);” ...这将返回保存的对象并包含生成的 id ...当您运行下一次保存时,它将知道它是一个现有对象,然后将进行更新而不是保存。

如果这不起作用,请创建一个 newBalance 对象,在第一次保存时设置它,并将其用于第二次保存和 setFinalBalance 调用。

关于java - 为什么 JpaRepository 不更新我的实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42160439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com