Hibernate: "Поле 'id' не имеет значения по умолчанию" - PullRequest
106 голосов
/ 30 апреля 2009

Я столкнулся с простой проблемой Hibernate, но не могу ее решить (недоступность форумов Hibernate определенно не помогает).

У меня есть простой класс, который я хотел бы сохранить, но продолжаю получать:

SEVERE: Field 'id' doesn't have a default value
Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not insert: [hibtest.model.Mensagem]
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
    [ a bunch more ]
Caused by: java.sql.SQLException: Field 'id' doesn't have a default value
    [ a bunch more ]

Соответствующий код для сохраняемого класса:

package hibtest.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Mensagem  {
    protected Long id;

    protected Mensagem() { }

    @Id
    @GeneratedValue
    public Long getId() {
        return id;
}

    public Mensagem setId(Long id) {
        this.id = id;
        return this;
    }
}

А действующий код просто прост:

SessionFactory factory = new AnnotationConfiguration()
    .configure()
    .buildSessionFactory();

{
    Session session = factory.openSession();
    Transaction tx = session.beginTransaction();

    Mensagem msg = new Mensagem("YARR!");

    session.save(msg);

    tx.commit();
    session.close();
}

Я попробовал некоторые "стратегии" в аннотации GeneratedValue, но, похоже, это не работает. Инициализация id тоже не помогает! (например, Long id = 20L).

Может ли кто-нибудь пролить свет?

РЕДАКТИРОВАТЬ 2: подтверждено: возиться с @GeneratedValue(strategy = GenerationType.XXX) не решает

решено: воссоздание базы данных решило проблему

Ответы [ 22 ]

0 голосов
/ 21 декабря 2010

Проверьте, не является ли значение по умолчанию для идентификатора столбца в определенной таблице. Если оно не установлено по умолчанию

0 голосов
/ 23 июня 2011

У меня была такая же проблема. Я использовал таблицу соединений, и все, что у меня было, с полем id строки и двумя внешними ключами. Я не знаю точную причину, но я сделал следующее

  1. Обновлен MySQL до сообщества 5.5.13
  2. Переименование класса и таблицы
  3. Убедитесь, что у меня есть хэш-код и методы равных

    @Entity 
    @Table(name = "USERGROUP")
    public class UserGroupBean implements Serializable {
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "USERGROUP_ID")
    private Long usergroup_id;
    
    @Column(name = "USER_ID")   
    private Long user_id;
    
    @Column(name = "GROUP_ID")
    private Long group_id;
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...