Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: could not insert - помогите пож!!! / 11 сообщений из 11, страница 1 из 1
04.06.2012, 17:39:47
    #37824745
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: could not insert - помогите пож!!!
Задача совсем тривиальная, но я уже 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
04.06.2012, 17:43:19
    #37824752
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: could not insert - помогите пож!!!
Казалось бы, причем здесь хибернейт?
Берем любой 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
04.06.2012, 17:44:01
    #37824753
Vladmir K
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: could not insert - помогите пож!!!
_webdev_,

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

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

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

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

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

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

int [10][10] arr;
...
Рейтинг: 0 / 0
04.06.2012, 18:11:20
    #37824804
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: could not insert - помогите пож!!!
_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
04.06.2012, 18:13:16
    #37824809
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: could not insert - помогите пож!!!
_webdev_И что еще важнее для меня, как мне сохранить такую штуку в БД?
int [10][10] arr;
Зависит от того что там за данные. Если это не FK, то тупо в строку сериализовать.
...
Рейтинг: 0 / 0
04.06.2012, 18:17:54
    #37824819
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: could not insert - помогите пож!!!
BlazkowiczЗависит от того что там за данные. Если это не FK, то тупо в строку сериализовать. ааа, неет - это обычний двумерный массив с числами, не более.
Я еще мало что понимаюю.. Следует посмотреть с точки зрения java? Тоисть прочитать свой массив в строку, потом доставать строку из БД и парсить обратно в свой массив? Я вас правильно понял? :)
...
Рейтинг: 0 / 0
04.06.2012, 18:20:30
    #37824822
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: could not insert - помогите пож!!!
Ахаххххх, табличку создает, все работает!! Хухххх, наконец то я начинаю вкуривать что и по чем. :)
...
Рейтинг: 0 / 0
04.06.2012, 20:29:53
    #37824949
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: could not insert - помогите пож!!!
_webdev_Я еще мало что понимаюю.. Следует посмотреть с точки зрения java? Тоисть прочитать свой массив в строку, потом доставать строку из БД и парсить обратно в свой массив? Я вас правильно понял? :)
Да. Можно в JSON загнать. Можно в любой другой удобный формат. Можно и в бинарный через сериализацию. Но его потом не очень удобно смотреть будет менеджерами.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: could not insert - помогите пож!!! / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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