java刷新对象_java – JpaRepository缓存新创建的对象.如何刷新?

在Spring MVC应用中,使用JpaRepository保存新创建的Translation实体时遇到问题。Translation实体包含一个Version对象,Version是懒加载的。在保存并刷新后,从数据库重新获取的Translation对象中,Version的属性没有被更新。服务类中的事务方法无法解决这个问题,即使尝试移动@Transactional注解到JpaRepository也无效。如何正确刷新Version对象以获取数据库中的最新值成为了一个挑战。
摘要由CSDN通过智能技术生成

我有一个JpaRepository在

Spring MVC应用程序中坚持新创建的实体.这个实体看起来像这样(非常简化):

@Entity

public class Translation {

.....

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

private long id;

@ManyToOne(fetch = FetchType.LAZY)

private Version version;

....

}

和版本实体:

@Entity

public class Version {

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

@Column(name = "id")

private long id;

@Column(name = "name")

private String name;

@Column(name = "version_code")

private long code;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "version", cascade = {CascadeType.ALL}, orphanRemoval = true)

private Set translations;

}

我创建一个这样的翻译对象

TranslationDTO t = new TranslationDTO();

t.setText(translationText);

ClientVersionDTO version = new ClientVersionDTO();

version.setId(11);

t.setVersion(version);

其中11是从一开始就存在于数据库中的版本.请注意,我没有为ClientVersionDTO的名称和代码设置值.

然后我有一个服务,坚持新的对象(我使用推土机库将DTO转换为实体)

@Service

@Transactional

public class TranslationsServiceImpl implements TranslationsService {

@Override

public Long create(TranslationDTO translationDTO) {

Translation translation = translationsConverter.unconvert(translationDTO);

Translation t = translationRepository.saveAndFlush(translation);

Translation t2 = translationRepository.findOne(t.getId());

// !!!! t2.getVersion() returns version where no values are set to 'code' and 'name'

return t2.getId();

}

}

请注意我的评论“t2.getVersion()返回版本,其中没有值被设置为’代码’和’名称’” – 我期待这样,当我从数据库中获取数据时,我将从数据库中设置了代码和名称值.但是它们没有设置.所以基本上我得到的一个t2.getVersion()对象是与输入参数translationDTO.getVersion()中相同的对象.我们如何重新使该Version对象无效?

UPDATE尝试将@Transactional移动到JpaRepository,但仍然是相同的结果.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值