2016-09-14 4 views
1

Ich bin neu in Hibernate JPA ..... Ich habe eine übergeordnete Tabelle und mehrere untergeordnete Tabellen.Ich möchte den Datensatz in untergeordneten Tabellen basierend auf der übergeordneten Tabelle Existenz einfügen.I möchte keinen Datensatz in der übergeordneten Tabelle einfügen. Wenn der Eintrag in der übergeordneten Tabelle vorhanden ist, möchte ich ihn in die untergeordnete Tabelle einfügen. Ich habe versucht mit einfügbaren und aktualisierbar in der Eltern-Tabelle Primärschlüssel als falsch. aber es funktioniert nicht. Ich benutze JPA 2.0 Version. Vielen Dank im Voraus. Bitte lassen Sie mich für weitere Informationen wissen.Hibernate JPA 2.0 nur aktualisieren und in untergeordneten Tabellen einfügen

================ von Kommentaren Copy- eingefügt:

Codebeispiel:

@Entity 
@NamedQuery(name="Custome.findAll", query="SELECT p FROM Customer p") 
public class Customer extends AbstractObject implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @EmbeddedId 
    private CustomerPK pk; 

@Temporal(TemporalType.DATE) 
@Column(name="end_dt") 
private Date endDt; 

@Column(name="desc_txt") 
private String descTxt; 

//bi-directional many-to-one association to Dependent 
@OneToMany(mappedBy="customer", cascade=CascadeType.ALL) 
private List<Dependent> dependents = new ArrayList<>(); 
} 

Ich möchte descTxt in der Kundentabelle aktualisieren und wan um die abhängige Tabelle einzufügen. Wenn CustomerPK in der Tabelle vorhanden ist, möchte ich aktualisieren, wenn ich die Aktualisierung des Datensatzes in Customer-Tabelle und Insertion auch nicht überspringen möchte. zur Zeit verwende ich session.saveorUpdate (object) Wenn ein Datensatz existiert, aktualisiert er den übergeordneten Datensatz und fügt ihn in die untergeordnete Tabelle ein. Aber wenn der übergeordnete Datensatz nicht existiert, fügt er einen übergeordneten Datensatz und untergeordnete Datensätze ein, die ich nicht in den übergeordneten Datensatz einfügen wollte Aufzeichnung

+0

Bitte fügen Sie Code hinzu, um zu zeigen, was Sie zu tun versuchen? Was sind die Eltern- und Kind-Entitäten und wie hängen sie zusammen? – greyfairer

+0

Codebeispiel: @Entity @NamedQuery (name = "Custome.findAll", query = "SELECT p FROM Customer p") publi} c-Klasse Kunden erweitert AbstractObject implementiert Serializable { \t private static final lange serialVersionUID = 1L; \t @EmbeddedId \t private CustomerPK pk; \t @Temporal (TemporalType.DATE) \t @Column (name = "end_dt") \t privaten endDt Datum; \t @Column (name = "desc_txt") \t private Zeichenfolge descTxt; \t // bidirektionale Viele-zu-Eins-Zuordnung zu Dependent \t @OneToMany (mappedBy = "Kunde", Kaskade = CascadeType.ALL) \t private List Bliebene = new Arraylist <>(); –

+0

Ich möchte descTxt in der Kundentabelle aktualisieren und die abhängige Tabelle einfügen. Wenn CustomerPK in der Tabelle vorhanden ist, dann möchte ich aktualisieren, wenn ich nicht Aktualisierung des Datensatzes in Customer-Tabelle und Einfügung auch überspringen möchte. zur Zeit benutze ich session.saveorUpdate (Objekt) Wenn Datensatz vorhanden ist, aktualisiert er übergeordneten Datensatz und Einfügen in untergeordneten Tabelle, aber wenn übergeordneter Datensatz nicht vorhanden ist, dann wird es übergeordneten Datensatz und untergeordnete Datensätze eingefügt, die ich nicht wollte Einfügen in Eltern-Datensatz –

Antwort

0

JPA wird das nicht beheben. Wenn Sie 'saveOrUpdate' aufrufen, wird es gespeichert oder aktualisiert. Es wäre sehr schlecht, wenn es sich so verhält, wie du es erwartest.

In der Praxis sollten Sie nie ein neues Kundenobjekt erstellen, wenn Sie es nicht speichern möchten. Sie implementieren Ihren Check-in-Code am besten außerhalb von JPA, z.

Customer customer = entityManager.find(Customer.class, customerPK); 
if(customer != null){ 
    customer.setDescription(...) 
    customer.addDependent(new Dependent (...)) 
    //customer + dependents will be saved at end of transaction or at flush 
} 
else { 
    LOG.info("Ignoring unexisting id", customerPk) 
} 

Hinweis:

  • Es gibt keine Notwendigkeit session.saveOrUpdate anzurufen, wenn der Kunde Instanz von Hibernate erstellt wurde, und Sie die richtige Transaktion/Session mgmt tun. Hibernate verfolgt alle Änderungen an persistenten Objekten in der aktuellen Sitzung und löscht sie am Ende der Sitzung.
  • Wenn Sie einen Abhängigen zur Liste der Abhängigen des Kunden hinzufügen (am besten mit einer addXxx-Methode), wird er am Ende der Sitzung automatisch mit dem korrekten Fremdschlüssel eingefügt.
+0

Vielen Dank für das Update .. es wird versuchen, und Sie wissen diese Option. –

+0

Vielen Dank für das Update .. es wird versuchen und Sie wissen lassen ... Eine weitere Klarstellung, die ich suche, ist customer.addDependent (...) muss in Customer hinzugefügt werden? Oder kann ich session.saveorupdate verwenden, nachdem ich die Existenz der Entität Customer überprüft habe? –

+0

Siehe zusätzliche Hinweise – greyfairer

Verwandte Themen