2017-12-05 4 views
1

Mein Add-Code funktioniert für jedes Objekt, erwarte die neue Tabelle, die ich gerade hinzugefügt habe (Report). Ich kann nicht scheinen, um das Problem zu finden und bekomme ich nur diesen Fehler:Konnte Anweisung nicht ausführen

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 Tabelle

My Sql Table

Java Zur Datenbank hinzufügen (alle Felder sind richtig)

//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

Die vollständige Stack-Ablaufverfolgung Ihrer Ausnahme könnte hier von Nutzen sein. Auch die genaue Linie, wo die Ausnahme auftritt (.save() oder .commit()?) – Marvin

+0

der VARCHAR (45) Primärschlüssel macht meine Haut crawl – Zeromus

+0

@Zeromus Ich bin ein Anfänger. Bitte geben Sie einen Rat. –

Antwort

0

Ohne vollständigen Stacktrace kann ich nur vermuten, dass die XML-Konfiguration auf dem varchar pk (die Sie tatsächlich eingestellt und wird nicht automatisch generieren) irgendwie das Problem verursacht ... versuchen zu entfernen, dass

Wenn Sie eingestellt Ihre pk Feld im Code

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

Sie haben keine Notwendigkeit für eine automatische Generierung Konfiguration

<generator class="native"/> 

al Also ich denke, dass Winterschlaf eine Zahl-Wert von Autoinkrement erwartet und das kann tatsächlich Dinge vermasseln

+0

Warum sagst du, ich sollte String nicht als PK verwenden? –

+0

Ich möchte nur später die Daten aus der Berichtstabelle extrahieren, wo environmentName = "etwas" –

+0

nein in der Antwort ich nur darauf hinweisen, dass die xml-Konfiguration, die Sie zur Verfügung gestellt Winterschlaf angibt, native Eigenerzeugung zu verwenden, aber auf String PK, die nicht viel macht Sinn ... Darüber hinaus setzen Sie es tatsächlich in den Code report.setEnvironmentName (environmentName); – Zeromus

Verwandte Themen