2017-01-05 1 views
0

Ich habe zwei pojo Klassen namens OwnerDetails & VehicleDetails, die zeigen, sind unterHibernate one to many Beziehung mit Update-Kind-Tabelle

@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.... 

} 

Und das Hauptprogramm ist

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(); 

    } 

Das Problem das ich habe, geschieht, nachdem Besitzerdetails und Fahrzeugdetails erfolgreich ohne Problem gespeichert wurden.

Aber ich muss eine weitere Videodetails mit gleichen Besitzerdetails hinzufügen. Es aktualisiert die aktuelle ViiChiceldetail-Instanz mit der Eigentümer-ID, und die vorhandene Zeile in den ViCliCleDetails wird mit Null-Owner-ID aktualisiert.

finden Sie die folgenden Tabellen.

enter image description here

+0

In ** VehicleDetails ** entferne 'cascade = cascadeType.All' aus der Notation '@manytoOne'. –

Antwort

0

Sieht aus wie die Aussage own.setVehicleDetails(vhSet); die vehicleDetails gesetzt verursacht nur mit dem neuen ersetzt werden. Verwenden Sie stattdessen own.getVehicleDetails().add(vh). Dadurch wird die neue vehicleDetails-Entität zu dem vorhandenen deleteDetails-Set hinzugefügt, das mit ownerDetails verknüpft ist, anstatt sie zu ersetzen.