2017-12-05 12 views
1

私の追加したコードは、オブジェクトを追加するたびに新しいテーブルが追加されました(レポート)を追加しました。私は、問題を見つけることができないよう、私はちょうどこのエラーを取得する:ステートメントを実行できませんでした

Could not execute statement when using .save(object)

Report.hbm.xml

<hibernate-mapping> 
<class name="com.atp.Models.Report" table="report"> 
    <meta attribute="class-description"> 
     This class contains the report details. 
    </meta> 
    <id name="environmentName" type="string" column="environmentName"> 
     <generator class="native"/> 
    </id> 
    <property name="individual" column="Individual" type="int"/> 
    <property name="corporation" column="Corporation" type="int"/> 
    <property name="dda" column="DDA" type="int"/> 
    <property name="sav" column="SAV" type="int"/> 
    <property name="mtg" column="MTG" type="int"/> 
    <property name="sepaOut" column="SEPAOUT" type="int"/> 
    <property name="sepaIn" column="SEPAIN" type="int"/> 
    <property name="atm" column="ATM" type="int"/> 
</class> 

MySQLのテーブル

My Sql Table

Javaデータベースに追加(すべてのフィールドが正しく表示されます)

私はあなたが設定した場合

ことを削除しようと...何とか問題を引き起こしている(あなたが実際に設定して自動生成されていないことを)varchar型のPKでのXML設定することを推測することができ、完全なスタックトレースなし
//Create new object 
    Report report = new Report(); 
    report.setEnvironmentName(environmentName); 
    report.setIndividual(individual); 
    report.setCorporation(corporation); 
    report.setDda(dda); 
    report.setSav(sav); 
    report.setMtg(mtg); 
    report.setSepaIn(sepaIn); 
    report.setSepaOut(sepaOut); 
    report.setAtm(atm); 

    ManageCreation.AddToDatabase(report); 

public static void AddToDatabase(Object object) { 
    SessionFactory factory = HibernateUtil.GetSessionFactory(); 
    Session session = factory.openSession(); 
    Transaction tx = null; 
    try{ 
     tx = session.beginTransaction(); 
     session.save(object); 
     tx.commit(); 
    }catch (HibernateException e) { 
     if (tx!=null) tx.rollback(); 
     e.printStackTrace(); 
    }finally { 
     session.close(); 
    } 
} 
+2

例外の完全なスタックトレースは、ここでいくつか使用することができます。また、例外が発生する正確な行(.save()または.commit()?) – Marvin

+0

VARCHAR(45)の主キーがスキンクロールを行っています – Zeromus

+0

@Zeromus私は初心者です。助けてください。 –

答えて

0

コード

Report report = new Report(); 
report.setEnvironmentName(environmentName); 

にあなたはアル

<generator class="native"/> 

自動生成の設定を必要としない、あなたのPKフィールドだから私は休止状態は、自動増分の数値型を期待していると思うこれは実際に物事を台無しにする可能性があります

+0

なぜあなたはPKとして文字列を使うべきではないと言いますか? –

+0

私はちょうどあなたが提供したxml構成が、ネイティブの自動生成を使用するように休止状態を指示しているが、多くのことをしない文字列pkであることを指摘しているので、environmentName = "something" –

+0

センス...さらに、実際にはコードreport.setEnvironmentName(environmentName);で設定します。 – Zeromus

関連する問題