【问题标题】:How to insert a new record with Foreign key? [duplicate]如何使用外键插入新记录? [复制]
【发布时间】:2017-08-14 14:03:29
【问题描述】:

数据库:

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

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    您需要先开始交易。 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();
    }
    

    【讨论】:

    • 对不起。我不能投票。
    • @VănTrọng 别担心。很高兴能帮上忙。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-12-23
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多