2012-02-23 3 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> 

Исключение: -

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: непоследовательный datatypes: expected 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

+0

@Firo: - нет никакого двоичного типа столбца, я не знаю, почему это исключение. –

ответ

1

Перейти к hibernate.cfg.xml

Проверить
<property name="hbm2ddl.auto">create</property>
Если написать, то изменится на "обновление"
<property name="hbm2ddl.auto">update</property>

0

эта ошибка coused по вашему умолчанию символ размера строки
у вас есть два выбор для решения этой проблемы
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, но показывает нулевые значения я преодолеть путем изменения имени базы данных и создание новых таблиц

Смежные вопросы