Hibernate: - Не удалось выполнить пакетное обновление JDBC - PullRequest
4 голосов
/ 23 февраля 2012

Я новичок в Hibernate, получаю исключение при попытке сохранить объект Friend_Job в базе данных.

Я получаю объект 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 получил НОМЕР

Friend_Job.java

public class Friend_Job {

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

и другие являются установщиками и получателями.

Пожалуйста, дайте мне знать, если требуется дополнительная информация ....Заранее спасибо.

Ответы [ 7 ]

1 голос
/ 15 августа 2012

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

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

0 голосов
/ 04 ноября 2018

У меня та же проблема, и я обнаружил, что проблема возникла из имени класса.я назвал свой порядок в классе и обнаружил, что Order - это ключевое слово

[javax.persistence.criteria.Order]

я обновляю имя своего класса и все работает эффективно

0 голосов
/ 31 октября 2017

Моя проблема в том, что таблица создана в SQL, но показывает нулевые значения, которые я преодолеваю, изменяя имя базы данных и создавая новые таблицы

0 голосов
/ 31 августа 2016

Эта ошибка в основном возникает из-за того, что данные не вставляются. Возможны следующие причины этой проблемы:

  1. Из-за повторяющихся значений.
  2. Отсутствует обязательное поле / столбец.
  3. Из-за неправильного ограничения.
0 голосов
/ 19 августа 2016

Одной из причин этого исключения может быть неправильное отображение, у меня был такой случай.Когда я просмотрел файл 'hbm', было сопоставление Set с дочерней таблицей, где я указал имя столбца, которого нет в дочерней таблице (столбца в таблице не было).Проблема была решена сразу после того, как я указал правильный столбец в отображении.Могут быть и другие причины, но пока это все, что я знаю, надеюсь, это поможет.

0 голосов
/ 28 июля 2016
    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 голосов
/ 04 декабря 2013

эта ошибка вызвана вашим символом размера строки по умолчанию
у вас есть два варианта решения этой проблемы
1.вы должны увеличить размер строки
пример

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

размер вашей компании должен быть меньше 25
2. изменить тип на текстовый пример

<property name="companyname" column="company_name" type='text' />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...