powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: could not insert - помогите пож!!!
11 сообщений из 11, страница 1 из 1
Hibernate: could not insert - помогите пож!!!
    #37824745
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача совсем тривиальная, но я уже 2 часа не могу догнать! Просмотрел тонны туториалов. С каждой версией что-то меняется, библиотек валом, ну и нафига 100500 библиотек? Дибилизм. Как вот придти ко всему этому. С каждой версией какие-то библиотеки меняются, то гибернейту логгинг не нравится, то та библиотека старая.

По сути, хочу вставить одно значение в БД, и то не могу, что за!!!.....
В чем глюк? Я уже что только не пробовал, как только эти аннотации не переставлял.
Гррррррр.

В общем ситуация такая. Равнялся на этот туториал... http://www.java-course.ru/students/students.php?name=part18

в итоге

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
package hibernate.test;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="user")
public class User {
	
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="id")
	private int uId;
	
    @Column(name="first_name")
	private String uName;

	public int getuId() {
		return uId;
	}

	public void setuId(int uId) {
		this.uId = uId;
	}

	public String getuName() {
		return uName;
	}

	public void setuName(String uName) {
		this.uName = uName;
	}

}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
	public static void main(String[] args) {

		UserDao dao = new UserDao();
		User user = new User();
		user.setuName("Oleg");
		dao.addApplicant(user);

	}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class UserDao {

	public Long addApplicant(User user) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Long result = (Long) session.save(user);
        session.getTransaction().commit();
        return result;
    }
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

      <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://127.0.0.1:3306/test</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>

      <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>

      <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">2</property>

      <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

      <!-- Disable the second-level cache -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

      <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>
        
        <mapping class="hibernate.test.User"/>

    </session-factory>

</hibernate-configuration>



Табличку создаю вот так

create table user(id int NOT NULL, first_name varchar(30),primary key(id));

Вот так вот дело с библиотеками https://dl.dropbox.com/u/26399837/hib.jpg

Вот трейс

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
log4j:WARN No appenders could be found for logger (org.hibernate.type.BasicTypeRegistry).
log4j:WARN Please initialize the log4j system properly.
Hibernate: insert into user (first_name) values (?)
Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not insert: [hibernate.test.User]
	at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:63)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2346)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2853)
	at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:320)
	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
	at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
	at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
	at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:713)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:701)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:697)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:345)
	at $Proxy8.save(Unknown Source)
	at hibernate.test.UserDao.addApplicant(UserDao.java:10)
	at hibernate.test.UserTest.main(UserTest.java:15)
Caused by: java.sql.SQLException: Field 'id' doesn't have a default value
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2975)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1600)
	at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1125)
	at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:677)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1357)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1274)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1259)
	at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:93)
	at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:56)
	... 23 more



Подскажите пож, а то я тупо убиваю время, и не знаю почему ругается. Во всех туториалах так же, - и все работает.!
...
Рейтинг: 0 / 0
Hibernate: could not insert - помогите пож!!!
    #37824752
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Казалось бы, причем здесь хибернейт?
Берем любой SQL менеджер.
Выполняем запрос
insert into user (first_name) values ('FNAME')
Получаем ту же самую ошибку без Hibernate вообще.


create table user(id int NOT NULL, first_name varchar(30),primary key(id));
Где тут Identity?
...
Рейтинг: 0 / 0
Hibernate: could not insert - помогите пож!!!
    #37824753
Vladmir K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_webdev_,

Caused by: java.sql.SQLException: Field 'id' doesn't have a default value

id в базе должно быть определено как identity
...
Рейтинг: 0 / 0
Hibernate: could not insert - помогите пож!!!
    #37824778
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
- офигеть, в начале я так и делал, получал ошибку, потом подумал что в том ошибка, еще сделал изменения, но была уже таблица без авто инкремента.

сделал таблицу вот так!

mysql> create table user(id int NOT NULL AUTO_INCREMENT, first_name varchar(30),primary key(id));
...
Рейтинг: 0 / 0
Hibernate: could not insert - помогите пож!!!
    #37824788
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для MySQL наверное ещё стоит заменить стратегию с .IDENTITY на .AUTO. Или убрать вообще. Хибер сам догадается.
...
Рейтинг: 0 / 0
Hibernate: could not insert - помогите пож!!!
    #37824798
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz - благодарствую.

Пользуясь случаем, не подскажете пож, что следует добавит, чтоб хибер автоматом делал таблички в Бд на основании классов. Знаю, туториалов много, но если это одна-две строчки, то спасибо заранее.

И что еще важнее для меня, как мне сохранить такую штуку в БД?

int [10][10] arr;
...
Рейтинг: 0 / 0
Hibernate: could not insert - помогите пож!!!
    #37824804
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_Пользуясь случаем, не подскажете пож, что следует добавит, чтоб хибер автоматом делал таблички в Бд на основании классов. Знаю, туториалов много, но если это одна-две строчки, то спасибо заранее.

Туториалы - фигня. Мануал рулит.
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/session-configuration.html
hibernate.hbm2ddl.auto - validate | update | create | create-drop (выбрать нужное по вкусу)
...
Рейтинг: 0 / 0
Hibernate: could not insert - помогите пож!!!
    #37824809
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_И что еще важнее для меня, как мне сохранить такую штуку в БД?
int [10][10] arr;
Зависит от того что там за данные. Если это не FK, то тупо в строку сериализовать.
...
Рейтинг: 0 / 0
Hibernate: could not insert - помогите пож!!!
    #37824819
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczЗависит от того что там за данные. Если это не FK, то тупо в строку сериализовать. ааа, неет - это обычний двумерный массив с числами, не более.
Я еще мало что понимаюю.. Следует посмотреть с точки зрения java? Тоисть прочитать свой массив в строку, потом доставать строку из БД и парсить обратно в свой массив? Я вас правильно понял? :)
...
Рейтинг: 0 / 0
Hibernate: could not insert - помогите пож!!!
    #37824822
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ахаххххх, табличку создает, все работает!! Хухххх, наконец то я начинаю вкуривать что и по чем. :)
...
Рейтинг: 0 / 0
Hibernate: could not insert - помогите пож!!!
    #37824949
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_Я еще мало что понимаюю.. Следует посмотреть с точки зрения java? Тоисть прочитать свой массив в строку, потом доставать строку из БД и парсить обратно в свой массив? Я вас правильно понял? :)
Да. Можно в JSON загнать. Можно в любой другой удобный формат. Можно и в бинарный через сериализацию. Но его потом не очень удобно смотреть будет менеджерами.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: could not insert - помогите пож!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]