понедельник, 21 марта 2011 г.

Hibernate & автогенерация ID

Для того, чтобы автоматически сгенерировать ID для ентити, необходима запись вида:

@Id
@GeneratedValue(
strategy=GenerationType.TABLE)
public Long getId() {
   return id;
}

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



Однако для MySQL при попытке создания новой записи в базе будет выдавать Exception типа:
org.hibernate.exception.SQLGrammarException: could not get or update next value
.......
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'sequence_next_hi_value' in 'field list'

Проблема решилась, когда в файле спринг-конфигурации в разделе hibernateProperties было прописано
   <property name="hibernateProperties"> 
       ....
       hibernate.id.new_generator_mappings=true
       ....
   </property>

2 комментария:

  1. @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private long id = 0;

    просто так работает :)

    ОтветитьУдалить
  2. да, entity лучше транскрибировать как энтити - ты все-таки по-русски пишешь ;)

    ОтветитьУдалить