与JPA插入记录有一个字段作为外键到另一个表
我想插入数据到一个表中,其中一个字段是FK到不同的表。问题是使用JPA和Criteria来执行操作,我想避免必须填写整个子对象才能这样做。 例子:与JPA插入记录有一个字段作为外键到另一个表
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="SENSOR_ID", nullable=false, updatable=false)
private Sensor sensor;
public Sensor getSensor() {
return sensor;
}
public void setSensor(Sensor sensor) {
this.sensor = sensor;
}
em.getTransaction().begin();
Measure m = new Measure();
m.setDeformation(measure.getDeformation());
m.setMoment(timestamp);
m.setTemperature(measure.getTemperature());
m.setTension(measure.getTension());
m.setSensorId(measure.getSensorId()); // I would like to do it like this and not having to use m.setSensor();
em.persist(m);
如果传感器在测量你的榜样映射,如:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="SENSOR_ID", nullable=false, updatable=false)
private Sensor sensor;
您需要填写传感器实例。传感器没有保存测量值,因为默认情况下没有操作级联。在调用之前必须保存它。
为了不填满整个传感器,请在Measure类中使用sensor_id FK而不是Sensor。
@Column(nullable = true)
private Long sensor_id;
同时使用一个必须为只读:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="SENSOR_ID", updatable=false, **insertable = false**)
private Sensor sensor;
类你究竟是如何实现的方法setSensorId()? 另外,当我试图读取表时,我得到了这个: 异常说明:字段[MEASURE.SENSOR_ID]存在多个可写映射。只有一个可以被定义为可写,所有其他都必须被指定为只读。 – wdoering
这是你建议我用sensor_id列做什么? @ManyToOne(取= FetchType.LAZY) \t @JoinColumn(名称= “SENSOR_ID”,可为空=假,可更新=假,插入= FALSE) \t私人传感器传感器; \t @Column(nullable = true) \t private Integer sensor_id; – wdoering
@ wdoering是的,就是这样。 –
为'm.setSensorId()'提供代码和测量 –