我有一个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,但仍然是相同的结果.