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