【发布时间】:2019-01-11 21:51:35
【问题描述】:
我使用 spring boot 2,我的一些实体有复合键
当我尝试保存实体时,出现此错误
转换请求元素失败: org.springframework.beans.ConversionNotSupportedException:失败 将类型“java.lang.Integer”的属性值转换为所需类型 'com.lcm.model.SamplingsPK' 用于属性“采样”;嵌套异常 是 java.lang.IllegalStateException:无法转换类型的值 'java.lang.Integer' 到所需的类型 'com.lcm.model.SamplingsPK' 属性“采样”:未找到匹配的编辑器或转换策略
我用那个方法得到了我的实体
public Samples findById(Integer id, int year, String sampleLetter) {
Optional<Samples> optSamples = samplesRepository.findById(new SamplesPK(new SamplingsPK(year, id), sampleLetter));
if (optSamples.isPresent()) {
return optSamples.get();
}
return null;
}
Samples samples = samplesService.findById(idSeq, year, samplesLetter);
Compressions compressionTest = null;
if (samples.getTestSamples().getAbsorptionTest() != null) {
compressionTest = samples.getTestSamples().getCompressionTest();
} else {
compressionTest = new Compressions();
}
samplesService.save(samples);
我的实体
@Entity
@IdClass(SamplesPK.class)
public class Samples extends BaseEntity{
@Id
private String sampleLetter;
@Embedded
private TestSamples testSamples;
@Id
@ManyToOne(optional=false)
@JoinColumns({
@JoinColumn(name = "sampling_id", referencedColumnName = "id"),
@JoinColumn(name = "sampling_year", referencedColumnName = "year")})
private Samplings sampling;
}
@Entity
@IdClass(SamplingsPK.class)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Samplings {
@Id
private Integer year;
@Id
@GeneratedValue
private Integer id;
@OneToMany(mappedBy = "sampling", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Samples> samples = new ArrayList<>();
}
public class SamplingsPK implements Serializable {
private int year;
private Integer id;
public SamplingsPK(int year, Integer id) {
this.id = id;
this.year = year;
}
}
public class SamplesPK implements Serializable {
private SamplingsPK sampling;
private String sampleLetter;
public SamplesPK(SamplingsPK sampling, String sampleLetter) {
this.sampling = sampling;
this.sampleLetter = sampleLetter;
}
}
编辑
保存样本没问题,当我通过采样时
【问题讨论】:
-
遇到同样的问题。我发现如果您直接使用 EntityManager,您可以正确地保留实体。同时,我打开了jira.spring.io/browse/DATAJPA-1391
-
不确定,因为我可以创建采样和采样...但可以通过压缩保存采样...
标签: spring hibernate jpa spring-data-jpa spring-data