Java 使用HQL查询插入

Java 使用HQL查询插入,java,hibernate,Java,Hibernate,我想在MySQL中插入一条新记录。 数据库: 实体类:`包实体; //由Hibernate Tools 4.3.1于2017年8月11日下午1:32:55生成 导入java.util.Date /** *hbm2java生成的UserMonhoc */ 公共类UserMonhoc实现java.io.Serializable{ private UserMonhocId id; private Monhoc monhoc; private User user; private Date th

我想在MySQL中插入一条新记录。 数据库: 实体类:`包实体; //由Hibernate Tools 4.3.1于2017年8月11日下午1:32:55生成

导入java.util.Date

/** *hbm2java生成的UserMonhoc */ 公共类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;
    }
}
它不起作用。 多谢各位

使用HQL查询插入

您不使用HQL查询

此调用:

Session.createSQLQuery(...)
创建本机SQL查询。

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

根据:

只有插入到。。。选择支持表单。你不能 指定要插入的显式值

但使用HQL查询无法解决问题,因为您希望指定要插入的值。

要持久化实体,在Hibernate中最自然的方法是调用
Session.persist()
方法:

UserMonhoc umh = new UserMonhoc();
... // set fields of the object
sf.getCurrentSession().persist(umh);
但是要做到这一点,
UserMonhoc
当然必须声明为一个实体。

我指定它是因为在您的实际实体中看不到任何Hibernate注释。这些可能在xml配置中声明…

您应该显示实体类并给出确切的错误消息。确定。它被更新了!为什么,为什么?只需使用session.persist(umh)。如果您想使用SQL查询在数据库中插入数据,那么不应该使用Hibernate,而应该使用JDBC。