Java 使用更新子表休眠一对多关系
我有两个名为Java 使用更新子表休眠一对多关系,java,hibernate,Java,Hibernate,我有两个名为OwnerDetails和VehicleDetails的pojo类,如下所示 @Entity public class OwnerDetails implements Serializable{ private static final long serialVersionUID = 1L; @Id @Column(name="Owner_id") private int id; @Column(name="owner_name")
OwnerDetails
和VehicleDetails
的pojo类,如下所示
@Entity
public class OwnerDetails implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@Column(name="Owner_id")
private int id;
@Column(name="owner_name")
private String ownerName;
@Column(name="email_id")
private String email;
@Column(name="mobile")
private String mobile;
@Column(name="land_line")
private String phone;
@Column(name="Mailing_Address")
private String mailing_address;
@OneToMany(mappedBy="ownerDetails", cascade=CascadeType.ALL)
private Set<VehicleDetails> vehicleDetails;
// getter & Setter...
}
@Entity
public class VehicleDetails implements Serializable{
private static final long serialVersionUID = 1L;
@Id
private int v_id;
@Column(name="TYPE")
private String type;
@Column(name="AC_OR_NON_AC")
private boolean aircondition;
@Column(name="SEATING_CAPACITY")
private int seatingCapacity;
@Column(name="FUEL_TYPE")
private String fuel_type;
@Column(name="Reg_number")
private String reg_number;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="Owner_id")
private OwnerDetails ownerDetails;
// getter & Setter....
}
@实体
公共类OwnerDetails实现了可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@列(name=“Owner\u id”)
私有int-id;
@列(name=“owner\u name”)
私有字符串所有者名称;
@列(name=“email\u id”)
私人字符串电子邮件;
@列(name=“mobile”)
私有字符串移动;
@列(name=“land\u line”)
私人电话;
@列(name=“邮寄地址”)
专用字符串邮寄地址;
@OneToMany(mappedBy=“ownerDetails”,cascade=CascadeType.ALL)
私家车详情;
//盖特和塞特。。。
}
@实体
公共类VehicleDetails实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
私人内部身份证;
@列(name=“TYPE”)
私有字符串类型;
@列(name=“AC\u或非AC”)
私人空调;
@列(名称=“座位容量”)
私人国际座位容量;
@列(name=“燃料类型”)
专用管柱式燃油泵;
@列(name=“注册号”)
私有字符串注册号;
@多通(级联=级联类型.ALL)
@JoinColumn(name=“Owner\u id”)
私人所有者详细信息;
//盖特和塞特。。。。
}
主要节目是
public static void main(String[] args) throws InterruptedException {
SessionFactory sf=getSessionFactory();
Session session=sf.getCurrentSession();
Transaction txn=session.beginTransaction();
OwnerDetails own=(OwnerDetails)session.get(OwnerDetails.class, 1);
Set<VehicleDetails> vhSet=new HashSet<VehicleDetails>();
VehicleDetails vh=new VehicleDetails();
vh.setAircondition(true);
vh.setFuel_type("DIESEL");
vh.setReg_number("TN32 AA 5555");
vh.setSeatingCapacity(12);
vh.setV_id(11);
vh.setType("INNOVA");
vh.setOwnerDetails(own);
vhSet.add(vh);
own.setVehicleDetails(vhSet);
session.saveOrUpdate(own);
txn.commit();
}
publicstaticvoidmain(String[]args)抛出InterruptedException{
SessionFactory sf=getSessionFactory();
Session Session=sf.getCurrentSession();
事务txn=session.beginTransaction();
OwnerDetails own=(OwnerDetails)session.get(OwnerDetails.class,1);
Set vhSet=新HashSet();
车辆详情vh=新车辆详情();
vh.设置空调(真实);
vh.setFuel_型(“柴油机”);
vh.setReg_编号(“TN32 AA 5555”);
vh.设置存储容量(12);
vh.setV_id(11);
vh.setType(“INNOVA”);
vh.设置所有者详细信息(自有);
添加(vh);
自有车辆详细信息(vhSet);
session.saveOrUpdate(自己的);
提交();
}
我遇到的问题发生在成功保存所有者详细信息和车辆详细信息后,没有任何问题
但我需要用相同的所有者详细信息再添加一个VihicledDetails。它使用ownerid更新当前vihicledetails实例,并使用null ownerid更新vihicledetails中的现有行
请查看下表
看起来像语句
own.setVehicleDetails(vhSet)代码>导致车辆详细信息集仅替换为新的车辆详细信息集。而是使用own.getVehicleDetails().add(vh)
。这将把新的vehicleDetails实体添加到与ownerDetails关联的现有vehicleDetails集合中,而不是替换它。在vehicleDetails中,从“@manytone”符号中删除“cascade=cascadeType.All”。