java - 如何使用外键插入新记录?

标签 java hibernate

<分区>

数据库:

enter image description here

User_Monhoc表中,user_id是一个外键。 我需要将 1 条新记录插入 User_Monhoc(user_id 是用户中存在的记录)。

User_Monhoc 映射:

<hibernate-mapping>
    <class name="entites.UserMonhoc" table="user_monhoc" catalog="bthibernate" optimistic-lock="version">
        <composite-id name="id" class="entites.UserMonhocId">
            <key-property name="userId" type="string">
                <column name="user_id" length="100" />
            </key-property>
            <key-property name="mhId" type="string">
                <column name="mh_id" length="100" />
            </key-property>
        </composite-id>
        <many-to-one name="monhoc" class="entites.Monhoc" update="false" insert="false" fetch="select">
            <column name="mh_id" length="100" not-null="true" />
        </many-to-one>
        <many-to-one name="user" class="entites.User" update="false" insert="false" fetch="select">
            <column name="user_id" length="100" not-null="true" />
        </many-to-one>
    </class>
</hibernate-mapping>

我的代码:

private final SessionFactory sf = HibernateUtil.getSessionFactory();

public boolean InsertStudent(String idUS, String idMH) {
    try {
        String xxxx = "";
        String hql2 = "INSERT INTO User_Monhoc(user_id,mh_id,tuan1, tuan2, tuan3, tuan4, tuan5, tuan6, tuan7, tuan8, tuan9, tuan10, tuan11, tuan12, tuan13, tuan14, tuan15) VALUES('" + idUS + "','" + idMH + "', 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 )";
        System.out.println(hql2);

        Query query = sf.getCurrentSession().createSQLQuery(hql2);
        int cc = query.executeUpdate();

        System.out.println(cc + "Dong");
        sf.getCurrentSession().getTransaction().commit();

        return true;
    } catch (Exception e) {
        return false;
    }
}

错误信息:

org.hibernate.HibernateException: createSQLQuery is not valid without active transaction

最佳答案

您需要先开始交易。 JavaDoc for Session详细介绍了通常的流程。我已经为您稍微修改了它:

Session sess = sf.openSession();
Transaction tx;
try {
     tx = sess.beginTransaction();

     // Your query etc.         
     Query query = sess.createSQLQuery(hql2);
     //...

     tx.commit();
}
catch (Exception e) {
     if (tx != null) tx.rollback();
     throw e;
}
finally {
     sess.close();
}

关于java - 如何使用外键插入新记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45676371/

相关文章:

java - 无法解析方法 'fromJson(org.json.JSONObject, java.lang.Class<me.myrottentomatoes.Result[]>)'

hibernate - 将数据库值重定向到另一个对象的字段

java - Hibernate:无法删除对象 - 外键约束 - CascadeType.REMOVE

java - .JAR 文件无法在其他计算机上打开

java - 从 recyclerview 行内的项目调用新 Activity

java - hibernate : classpath resource cannot be opened because it does not exist

java - 对象不是声明类-Hibernate 的实例

java - 无法在 NetBeans IDE 中使用嵌入式 Derby 连接生成 Hibernate 逆向工程

java - 如何以编程方式删除 Eclipse 安全存储设置

java - 单击按钮将对象从一个类传递到另一个类