Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Hibernate: could not insert - помогите пож!!!


Автор: Killer_13 4.6.2012, 16:41
Задача совсем тривиальная, но я уже 2 часа не могу догнать! Просмотрел тонны туториалов. С каждой версией что-то меняется, библиотек валом, ну и нафига 100500 библиотек? Дибилизм. Как вот придти ко всему этому. С каждой версией какие-то библиотеки меняются, то гибернейту логгинг не нравится, то та библиотека старая.

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

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

в итоге 

Код


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;
    }

}



Код

    public static void main(String[] args) {

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

    }


Код

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;
    }
}


Код

<?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

Вот трейс

Код

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



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


Автор: Killer_13 4.6.2012, 17:01
Вроде ошибку подсказали!
офигеть, в начале я так и делал, получал ошибку, потом подумал что в том ошибка, еще сделал изменения, но была уже таблица без авто инкремента.

сделал таблицу вот так! и данные вставились в БД. Надеюсь, что правильно все.

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)