LINUX.ORG.RU

проблема с sequnces в Java Persistence API


0

0

Есть база данных PostgreSQL 8.2 с таблицей my_table(id,name), и есть класс:

@Entity
@Table(name = "my_table")
public class MyClass {

@SequenceGenerator(name="id_seq", sequenceName="my_id_seq")
@Id @GeneratedValue(generator="id_seq")
@Column(name = "id", nullable = false)
private long id;

@Column(name = "names")
private String names;

public MyClass() {
}

public MyClass(String n) {
this.names=n;
}
}

Подразумевается, что поле id генерируется при:

MyClass m = new MyClass();

или:

MyClass m = new MyClass("foo");

Берется число из последовательности (sequence) - my_id_seq и передается полю id, но этого не происходит, программа даже не обращается к my_id_seq (в базе не меняется текущее значение последовательности), пожалуйста помогите разобраться в чем дело.

Ответ на: комментарий от Falgrim

Вот придёт после тебя второй такой же, и вместо того, чтобы прочитать готовый ответ (твой), тоже будет создавать новую тему.

Опиши решение.

execve
()
Ответ на: комментарий от execve

Видимо проблема была в несоответствии имени последовательности, оно должно быть <имя таблицы>_<имя колонки>_seq, я решил проблему так:
- Пересоздал поле "id" в базе, но только тип указал не integer а serial, для которого Postgres создал последовательность с именем my_table_id_seq.

Вот здесь про это написано,

http://docs.sun.com/app/docs/doc/819-3659/gbxjk?a=view,

Using a SERIAL Field in PostgreSQL

To use a SERIAL field in a PostgreSQL database, define the following in your entity class:

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)

The field created is of type SERIAL, and the implicit native sequence associated with this field is of the form FullyQualifiedName_IdFieldColumnName_SEQ.

Но у меня заработало и с @GeneratedValue(strategy=GenerationType.SEQUENCE)

Falgrim
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.