2017-01-05 28 views
0

我有一個名爲OwnerDetails & VehicleDetails 2 POJO類,其示於下Hibernate的一個與更新子表中的許多關係

@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的vihicledetails。它用ownerid更新當前vihicledetails實例,vihicledetails中的現有行用null ownerid更新。

請查看下錶。

enter image description here

+0

在** VehicleDetails **中從'@manytoOne'表示法中刪除'cascade = cascadeType.All'。 –

回答

0

貌似own.setVehicleDetails(vhSet);導致設置爲只被新的取代vehicleDetails的聲明。請使用own.getVehicleDetails().add(vh)。這會將新的vehicleDetails實體添加到與ownerDetails關聯的現有vehicleDetails集合中,而不是替換它。

相關問題