2012-02-23 22 views
3

私はHibernateで新しく、データベースにFriend_Jobオブジェクトを保存しようとすると例外が発生しています。Hibernate: - JDBCバッチ更新を実行できませんでした

私はFriendとJobオブジェクトをデータベースから取得し、新しいFrien_Jobオブジェクトを作成しています。

Test.java

SessionFactory sessionFectory = new Configuration().configure().buildSessionFactory(); 
    Session session = sessionFectory.openSession(); 
    Transaction transaction = session.beginTransaction(); 
    Friend friend= (Friend) session.load(Friend.class, new Integer(1)); 
    Job job = (Job) session.load(Job.class, new Integer(3)); 
    Friend_Job friend_Job = new Friend_Job(); 
    friend_Job.setFriend(friend); 
    friend_Job.setJob(job); 
    friend_Job.setCompanyName(job.getCompanyName()); 
    session.save(friend_Job); 
    transaction.commit(); //Exception here 

Friend_Job.hbm.xml

<hibernate-mapping> 
<class name="hibernateTest.Friend_Job" table="FRIEND_JOB"> 
    <id name="primaryKey" column="PRIMARY_KEY"> 
     <generator class="increment"/> 
    </id> 
    <property name="companyName" type="string" column="COMPANY_NAME"/> 
    <property name="salary" column="SALARY"/> 
    <many-to-one name="friend" class="hibernateTest.Friend" cascade="none" column="FK_FRIEND_ID"/> 
    <many-to-one name="job" class="hibernateTest.Job" cascade="none" column="FK_JOB_ID"/> 
</class> 
</hibernate-mapping> 

例外: - :java.sql.BatchUpdateException:ORA-00932:矛盾に起因

org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update 
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90) 
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275) 
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266) 
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167) 
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321) 
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50) 
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027) 
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365) 
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137) 
at hibernateTest.Test.main(Test.java:20) 

データ型:期待されるBINARYはNUMBERになりました

Friend_Job.java

public class Friend_Job { 

private int primaryKey; 
private String companyName; 
private int salary = 0; 
private Friend friend; 
private Job job; 

と他のセッターとゲッターです。

詳細情報が必要な場合はお知らせください... ありがとうございます。 hibernate.cfg.xml

チェック
<property name="hbm2ddl.auto">create</property>

+0

を作成することによって克服 NULL値を示していますか? – Firo

+0

@Firo: - 列型バイナリはありません。なぜこの例外がスローされるのかわかりません。 –

答えて

1

ゴーあなたは2を持っているあなたのデフォルトの文字列サイズの文字
によってcousedこのエラー <property name="hbm2ddl.auto">update</property>

0

"更新"
に変更後、作成がある場合この問題を解決するための選択肢
1.文字列の文字サイズを指定する必要があります

<property name="companyname" column="company_name" length='25' /> 

あなたの会社名のサイズが少しより25
2.変更タイプは、その例外の例 理由の

<property name="companyname" column="company_name" type='text' /> 
0
Thera are 2 possibilities : 
    1. Primary key issue. You are inserting the same value 2 times. 
    2. You are using  
    SessionFactory factory=new AnnotationConfiguration().configure().buildSessionFactory(); 
    for creating sessionfactory OBJECT. It used for mysql. 
So use following for oracle DB: 
SessionFactory factory = new Configuration().configure().buildSessionFactory(); 
    for getting session. 
0

一つをテキストにしなければなりません無効なマッピングが原因である可能性がありますケースがあります。私が 'hbm'ファイルを調べると、子テーブルにSetマッピングがあり、子テーブルにないカラム名を指定しました(カラムはテーブルに存在しませんでした)。この問題は、マッピングで適切な列を指定した直後に解決されました。 他にも理由があるかもしれませんが、これは私が知っているすべてのものです。

-1

このエラーは、主にデータが挿入されないために発生します。 次の理由が考えられます。

  1. 重複した値が原因です。
  2. フィールド/列が必須ではありません。
  3. 間違った制約のためです。
0

私の問題は、テーブルであるSQLで作成されたが、私は `FRIEND_JOB`がタイプバイナリのあるテーブル内のどの列のデータベース名を変更し、新しいテーブル

関連する問題