2012-02-23 53 views
3

我是Hibernate中的新手,在嘗試將Friend_Job對象保存到數據庫時出現異常。休眠: - 無法執行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> 

例外: -

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) 

所致:java.sql.BatchUpdateException:ORA-00932:不一致數據類型:預計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; 

否則是設置者和獲取者。

請讓我知道是否需要更多信息.... 在此先感謝。

+0

其列的表'FRIEND_JOB'是二進制類型的空值 我克服產生的? – Firo 2012-02-24 08:48:40

+0

@Firo: - 沒有任何列類型的二進制文件,我不知道爲什麼這個異常拋出。 – 2012-02-29 04:42:42

回答

1

轉到hibernate.cfg.xml

檢查
<property name="hbm2ddl.auto">create</property>
如果創建然後更改爲 「更新」
<property name="hbm2ddl.auto">update</property>

0

此錯誤您的默認字符串大小字符致毒
你有兩個解決此問題的選擇
1.you必須加上字符串字符大小
例如

<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,但顯示通過更改數據庫名稱和創建新表

相關問題