【发布时间】:2018-11-02 20:58:35
【问题描述】:
在一个带有hibernate和jpa的spring boot 2项目中,
我尝试保存一些对象
@Embeddable
public class EmbedddedSamplesKey implements Serializable {
private Integer id;
private int year;
...
}
@Entity
@IdClass(EmbedddedSamplesKey.class)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Samplings {
@Id
@GeneratedValue
private Integer id;
@Id
private int year;
@OneToMany(mappedBy = "sampling", cascade = CascadeType.PERSIST, orphanRemoval = true)
private List<Samples> samples = new ArrayList<>();
public void addSample(Samples sample) {
samples.add(sample);
sample.setSampling(this);
}
public void removeSample(Samples sample) {
samples.remove(sample);
sample.setSampling(null);
}
...
}
@Entity
public class Samples extends BaseEntity {
@Id
@SequenceGenerator(name = "samples_id_seq", sequenceName = "samples_id_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "samples_id_seq")
private Integer id;
private String letter;
//@OneToOne(optional = false, cascade = CascadeType.PERSIST)
//private TestSamples testSamples;
@ManyToOne
private Samplings sampling;
...
}
当我保存采样时,我会在样本表中看到
sampling_id 采样年
不是饲料
这应该是 orm 的工作吗?
在 Samples 中,orm 已经生成了这个
ALTER TABLE samples
ADD CONSTRAINT fkq5if151jgtlcy7yfp55ffvf47 FOREIGN KEY (sampling_id, sampling_year)
REFERENCES samplings (id, year)
ON UPDATE NO ACTION
ON DELETE NO ACTION;
编辑,尝试
@ManyToOne
@JoinColumns({
@JoinColumn(name = "sampling_id", referencedColumnName = "id"),
@JoinColumn(name = "sampling_year", referencedColumnName = "year")})
private Samplings sampling;
但结果相同
另外,如果在 Samples 中我想使用像 Sampling primary + field letter 这样的主键,有没有办法做到这一点?
【问题讨论】:
标签: java hibernate spring-boot jpa spring-data