2017-08-14 89 views
0

我想向MySQL插入新记录。 数据库:enter image description here 实体类:`package entites; // Generated Aug 11,2017 1:32:55 PM by Hibernate Tools 4.3.1使用HQL查询插入

import java.util.Date;

/** * 通过UserMonhoc调用:hbm2java */ 公共类UserMonhoc实现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; 
} 

}产生

`

代码:

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; 
    } 
} 

它不起作用。 谢谢。

+0

您应该显示实体类并给出确切的错误消息。 – davidxxx

+0

好的。它已更新! –

+0

为什么哦为什么?只需使用'session.persist(umh)'。如果你想使用SQL查询在你的数据库中插入数据,你不应该使用Hibernate,而应该使用JDBC。 –

回答

1

插入与HQL查询

您不使用HQL查询。

此调用:

Session.createSQLQuery(...) 

创建一个本地的SQL查询。

无论如何,你不能在HQL中以这种方式使用INSERT。

根据Hibernate documentation

只有INSERT INTO ...支持SELECT ...形式。您不能 指定要插入的显式值。

但是,使用HQL查询不会解决您的问题,因为您要指定要插入的值。

要保留的实体,在Hibernate中做的是调用Session.persist()方法的最自然的方式:

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

但要做到这一点,当然UserMonhoc都将被声明为一个实体。
我指定它,因为在您的实际实体中没有看到任何Hibernate注释。这些可能是在xml配置中声明的...