【问题标题】:How can I save two entities of the same type in one transaction?如何在一个事务中保存两个相同类型的实体?
【发布时间】:2018-10-28 08:23:12
【问题描述】:

我有一个OfferRepository extends JpaRepository<OfferEntity, Long>,在某一时刻,它必须保存两个实体:

@Transactional
public OfferDto save(OfferDto offerDto) {

    // ..

    OfferEntity oneOfferEntity = new OfferEntity();
    // Copy data ..
    oneOfferEntity = this.offerRepository.save(oneOfferEntity);

    // Further down ..

    OfferEntity anotherOfferEntity = new OfferEntity();
    // Copy data ..
    anotherOfferEntity = this.offerRepository.save(anotherOfferEntity);

    return OfferDto.fromEntity(anotherOfferEntity);
}

我的问题是似乎只有第二个实体被存储。第一个似乎被忽略了——除非我注释掉第二个保存操作。

我从来没有遇到过这种情况——这不可能吗?如何确保此处保存了两个不同的实体?

【问题讨论】:

    标签: spring spring-boot


    【解决方案1】:

    当然可以,但问题是,实体被视为same。所以这就是你只保存第二个的原因,你可以尝试做这样的事情:

    OfferEntity oneOfferEntity = new OfferEntity();
    oneOfferEntity.setProperty1("1");
    OfferEntity anotherOfferEntity = new OfferEntity();
    anotherOfferEntity.setProperty1("2");
    

    Property1 是实体中的一些属性。

    更多详细信息:JPAHibernate 使用 hashCode()equals() 来确定实体是否相同,在您的情况下,两个实体被视为相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-30
      • 2012-07-01
      相关资源
      最近更新 更多