2017-12-05 2 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 데이터베이스에 추가 (모든 필드가 오른쪽)

전체 스택 트레이스없이
//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

난 단지 VARCHAR의 PK에 XML 구성은 (당신이 실제로 설정하고 자동 생성되지 않도록) 어떻게 든 문제를 일으키는 추측 ...

사용자가 설정하면 것을 제거하려고 할 수 있습니다 코드에서 PK 필드는

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

당신은 자동 생성 구성을위한 필요가 없습니다

<generator class="native"/> 

알 그래서 나는 최대 절전 모드가 자동 증가에 대한 숫자 형의 값을 기대하고 있다고 생각한다. 이것은 실제로 물건을 엉망으로 만들 수도있다.

+0

왜 내가 PK로 문자열을 사용하지 말아야한다고 말합니까? –

+0

난 단지 나중에 보고서 테이블에서 데이터를 추출하고 싶습니다. environmentName = "something" –

+0

아니요, 대답은 단지 xml 구성이 네이티브 자동 생성을 사용하기 위해 최대 절전 모드라고 말하고 있지만, 문자열 pk에서는 그다지 효과가 없습니다. 감각 ... 게다가 당신은 실제로 코드 report.setEnvironmentName (environmentName); – Zeromus