如何在一次交易中保存两个相同类型的实体?

时间:2018-10-28 08:23:12

标签: spring spring-boot

我有一个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);
}

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

我从未遇到过这种情况-不可能这样做吗?如何确保两个不同的实体保存在这里?

1 个答案:

答案 0 :(得分:0)

当然可以,但是问题在于,实体被视为same。因此,只有第二个被保存,您可以尝试执行以下操作:

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

Property1是实体中的某些属性。

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

相关问题