我使用spring boot 2,我的一些实体有复合键
当我尝试保存一个实体时,我会得到这个错误
无法转换请求元素:org.springframework.beans.conversionNotSupportedException:无法将类型“java.lang.integer”的属性值转换为属性“samping”所需的类型“com.lcm.model.samplingspk”;嵌套异常为java.lang.IllegalStateException:无法将“java.lang.Integer”类型的值转换为属性“sampling”所需的类型“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;
}
}
编辑
没有问题保存样本,当我通过取样
这个问题在https://jira.spring.io/browse/datajpa-1391中跟踪,它与samples
中的@id@manytoOne
的使用有关。作为一种解决办法,您可以尝试为samplings
创建一个包含两个主键的构造函数,或者一个包含java.lang.integer
的构造函数?这对单一级别的复合主键是有效的,但如果有多个级别,则可能不起作用。
您还将samplingspk
中的year
键入为int
而不是integer
。这可能会导致PK识别的问题,因为需要特别考虑处理AutoBox的原始类,我怀疑这是考虑过的。
我有以下实体: 我第一次使用复合主键,所以我不知道它应该如何工作。问题可能来自定义。第二个参数应该表示ID。但是没有一个主键,而是有两个主键,所以我认为我应该将id类添加到id参数中,但这不起作用。如何使用带有CrudRepository的IdClass键保存具有复合主实体?
我有以下100万个实体的关系,指导学生。mentor有复合主键,我在student中使用它作为外键 然后,我将上面的内容保持为下面的内容,但在student表为空的地方,只有mentor被保持。 我如何坚持与学生的导师?
异常[EclipseLink-48](Eclipse Persistence Services-2.3.2.v20111125-r10461):org.Eclipse.Persistence.exceptions.Description异常描述:字段[flight.connid]存在多个可写映射。只有一个可以定义为可写,所有其他的都必须指定为只读。映射:org.eclipse.persistenc
问题内容: 如果我有两个像这样的hibernate实体: 我有一个已经存储的公司 我可以创建一个仅用其ID引用公司的人,而不是加载整个记录,例如: 它是仅保存参考还是使用更新公司? 问题答案: 是的,您可以做到。 它是否仅保存引用,还是使用name = null更新公司? 使用default ,这样,Hibernate将不执行任何操作。因此答案是:它只保存一个外键。 最有效的方法(也适用于JPA)
我有两个具有@ManyToOne关系的实体类,如下所示。 我是Spring Data JPA的新手,所以这可能是一个非常基本的错误。
我在使用复合主键创建实体时遇到问题,该键也是外键。这是我的表和关系表原理图。当我想创建新闻实体时,我收到了带有null creatingnews的错误消息。新闻翻译有复合主键,外键引用到新闻表。 这是我的代码: 新闻聚合 新闻翻译 标签 新闻语言ID 在NewsFactory中,我希望使用NewsTranslation创建NewsAggregate,但有错误消息NullPointer。 新闻工厂