Java JPA@OneToMany和@EmbeddedId
我有以下班级(家长): 子类将主键定义为嵌入id:Java JPA@OneToMany和@EmbeddedId,java,jpa,Java,Jpa,我有以下班级(家长): 子类将主键定义为嵌入id: @Entity @Table(name = "PROBE_MONITORS") public class ProbeMonitor implements Serializable { private static final long serialVersionUID = 1L; private ProbeMonitorId id; private Integer active; @EmbeddedId
@Entity
@Table(name = "PROBE_MONITORS")
public class ProbeMonitor implements Serializable {
private static final long serialVersionUID = 1L;
private ProbeMonitorId id;
private Integer active;
@EmbeddedId
@XmlElement
@JsonProperty
public ProbeMonitorId getId() {
return id;
}
}
当我创建ProbeCustomer
的实体并尝试调用save方法时(使用crudepository
)
我得到以下(错误的insert语句)-在insert中有比我在那里写的更多的字段,为了简洁起见,我删除了这些字段:
insert into PROBE_CUSTOMERS (Df_Hostname, Dt_Insert, Df_Customer, Dt_Update, id) values (?, ?, ?, ?, ?)
insert into PROBE_MONITORS (Fl_Active, Dt_Insert, Dt_Update, Df_Customer, Df_Monitor, Df_Type) values (?, ?, ?, ?, ?, ?)
insert into Probe_Monitors (Df_Customer, monitors_Df_Customer, monitors_Df_Monitor, monitors_Df_Type) values (?, ?, ?, ?)
我在哪里错误地定义了关系?不知何故,插入中的字段与映射中的字段不匹配。当所有这些都是出乎意料的时候,很难发现哪些是错误的。在网上我找到了一篇文章,我把@OneToMany简化为@OneToMany(mappedBy=“id.customer”,cascade={CascadeType.all},fetch=FetchType.LAZY)。这一切都很有效
@Entity
@Table(name = "PROBE_MONITORS")
public class ProbeMonitor implements Serializable {
private static final long serialVersionUID = 1L;
private ProbeMonitorId id;
private Integer active;
@EmbeddedId
@XmlElement
@JsonProperty
public ProbeMonitorId getId() {
return id;
}
}
insert into PROBE_CUSTOMERS (Df_Hostname, Dt_Insert, Df_Customer, Dt_Update, id) values (?, ?, ?, ?, ?)
insert into PROBE_MONITORS (Fl_Active, Dt_Insert, Dt_Update, Df_Customer, Df_Monitor, Df_Type) values (?, ?, ?, ?, ?, ?)
insert into Probe_Monitors (Df_Customer, monitors_Df_Customer, monitors_Df_Monitor, monitors_Df_Type) values (?, ?, ?, ?)