2017-08-14 2 views
0

Ich möchte einen neuen Datensatz in MySQL einfügen. Datenbank: enter image description here Entity-Klasse: `Paket entspricht; // Generiert Aug 11, 2017 1:32:55 PM von Hibernate Tools 4.3.1Einfügen mit HQL-Abfrage

importieren java.util.Date;

/** * UserMonhoc erzeugt durch hbm2java */ public class UserMonhoc implementiert java.io.Serializable {

private UserMonhocId id; 
private Monhoc monhoc; 
private User user; 
private Date thoigianDk; 

public UserMonhoc() { 
} 

public UserMonhoc(UserMonhocId id, Monhoc monhoc, User user, Date thoigianDk) { 
    this.id = id; 
    this.monhoc = monhoc; 
    this.user = user; 
    this.thoigianDk = thoigianDk; 
} 

public UserMonhocId getId() { 
    return this.id; 
} 

public void setId(UserMonhocId id) { 
    this.id = id; 
} 
public Monhoc getMonhoc() { 
    return this.monhoc; 
} 

public void setMonhoc(Monhoc monhoc) { 
    this.monhoc = monhoc; 
} 
public User getUser() { 
    return this.user; 
} 

public void setUser(User user) { 
    this.user = user; 
} 
public Date getThoigianDk() { 
    return this.thoigianDk; 
} 

public void setThoigianDk(Date thoigianDk) { 
    this.thoigianDk = thoigianDk; 
} 

}

`

Code:

public boolean InsertStudent(String idUS, String idMH) { 

    try { 
     sf.getCurrentSession().beginTransaction(); 
     UserMonhoc umh = new UserMonhoc(); 
     String hql2 = "INSERT INTO User_Monhoc(user_id,mh_id) VALUES('" + idUS + "','" + idMH + "')"; 
     System.out.println(hql2); 
     Query query = sf.getCurrentSession().createSQLQuery(hql2); 
     query.executeUpdate(); 
     return true; 
    } catch (Exception e) { 
     return false; 
    } 
} 

es funktioniert nicht. Danke.

+0

Sie sollten die Entitätsklasse zeigen und die genaue Fehlermeldung geben. – davidxxx

+0

Ok. es wurde aktualisiert! –

+0

Warum oh warum? Verwenden Sie einfach 'session.persist (umh)'. Wenn Sie SQL-Abfragen zum Einfügen von Daten in Ihre Datenbank verwenden möchten, sollten Sie nicht Hibernate, sondern JDBC verwenden. –

Antwort

1

Insert mit HQL Abfrage

Sie keine HQL-Abfrage verwenden.

Dieser Aufruf:

Session.createSQLQuery(...) 

schafft eine native SQL-Abfrage.

Wie auch immer, Sie können INSERT auf diese Weise nicht in HQL verwenden.

Nach Hibernate documentation:

Nur das INSERT INTO ... SELECT ... Form unterstützt wird. Sie können keine expliziten Werte angeben, die eingefügt werden sollen.

Die Verwendung einer HQL-Abfrage löst Ihr Problem jedoch nicht, da Sie die einzufügenden Werte angeben möchten.

Um ein Objekt, die natürlichste Art und Weise zu tun, in dem Ruhezustand wird das Aufrufen die Session.persist() Methode zu bestehen:

UserMonhoc umh = new UserMonhoc(); 
... // set fields of the object 
sf.getCurrentSession().persist(umh); 

Aber es UserMonhoc natürlich zu tun hat als Einheit erklärt werden.
Ich gebe es an, da ich keine Hibernate-Annotation in Ihrer tatsächlichen Entität sehe. Diese sind möglicherweise in der XML-Konfiguration deklariert ...