Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用外键插入新记录?_Java_Hibernate - Fatal编程技术网

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

Java 如何使用外键插入新记录?,java,hibernate,Java,Hibernate,数据库: 在User\u Monhoc表中,User\u id是外键。 我需要在User\u Monhoc中插入1条新记录(其中User\u id是User中存在的记录) 用户地图: <hibernate-mapping> <class name="entites.UserMonhoc" table="user_monhoc" catalog="bthibernate" optimistic-lock="version"> <composi

数据库:

User\u Monhoc
表中,
User\u id
是外键。 我需要在
User\u Monhoc
中插入1条新记录(其中
User\u id
是User中存在的记录)

用户地图:

<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>
错误计量表:

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

您的代码与实体无关。您正在尝试调用SQL,但没有活动事务。您应该启动一个并在插入后提交

Transaction tx = sf.getCurrentSession().beginTransaction();
...

tx.commit();

您需要首先开始一个事务。细节与通常的流程相同。我为您稍微修改了一下:

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

我很抱歉。我不能投票。@VănTrọ别担心。很高兴能帮忙。
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();
}