我有两个名为OwnerDetails
&的pojo类。 VehicleDetails
,显示在下面
@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....
}
主程序是
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();
}
我所拥有的问题发生在ownerdetails和vehicledetails成功保存后没有任何问题。
但是我需要添加一个带有相同ownerdtails的vihicledetails。它使用ownerid更新当前vihicledetails实例,并使用null ownerid更新vihicledetails中的现有行。
请查看下表。
答案 0 :(得分:0)
看起来语句own.setVehicleDetails(vhSet);
导致vehicleDetails设置为仅用新的替换。而是使用own.getVehicleDetails().add(vh)
。这会将新的vehicleDetails实体添加到与ownerDetails相关联的现有vehicleDetails集,而不是替换它。