2016-07-27 62 views
2

Ich habe einen zusammengesetzten Schlüssel eingebettet, dieHibernate 5.x löschen Datensatz basierend auf partiellen Composite ID?

@Embeddable 
public static class PK implements Serializable { 

    private static final long serialVersionUID = 4049628068378058196L; 

    @Column(name="colA", length=32, nullable=false) 
    private String colA; 

    @Column(name = "colB", length=32, nullable=false) 
    private String colB; 

    //constructors/getters/setters 
} 

von zwei Spalte bestehen Gibt es eine Möglichkeit, nur colB Wert wie

Serializable id = new String(myColBValue); 

Object persistentInstance = session.get(MyObject.class, id); 
if (persistentInstance != null) { 
      session.delete(persistentInstance);  
} 

oder tun mit einem persistenten Objekt löschen kann ich zurückgreifen zu müssen Verwenden der HQL-Anweisung?

Antwort

1

Wenn Sie zwei Spalten benötigen, um MyObject zu identifizieren, reicht es nicht aus, nur ein einziges zu liefern, um jedes Mal ein eindeutiges Ergebnis zu finden. Weder Session noch EntityManager bieten die Methode, die Sie suchen. Sie müssen mit Criteria oder Query gehen.

+0

okay, aber wie mit hql jetzt löschen? PK ist eine private Entität in meinem Entitätsobjekt. Scheint, dass es die Spalte nicht auflösen kann. Hibernate 5 ist wirklich mehr Ärger als Arbeit mit Mangel an Dokumentation. session.createQuery ("Löschen von MyObject wo PK.colB =: colb") \t \t \t \t \t \t \t \t \t .setParameter ("colb", "foobar") \t \t \t \t \t \t \t \t \t .executeUpdate(); führt zu einem Fehler "konnte Anweisung nicht ausführen" –