Какой GenerationType я должен использовать с hibernate и с уже существующей таблицей - PullRequest
0 голосов
/ 07 января 2019

У меня проблема, когда @GeneratedValue(strategy=GenerationType.AUTO) не работает должным образом. У меня ошибка, говорящая, что kcyn.hibernate_sequence не существует.

Я прочитал следующую тему: hibernate не может получить следующее значение последовательности . Это говорит, что я должен изменить AUTO на IDENTITY. Но тогда у меня есть ошибка, говорящая, что значение NULL добавлено в первичный ключ.

Если я начинаю с несуществующей таблицы со стратегией AUTO, hibernate автоматически создает таблицу airroute с таблицей hibernate_sequence.

Но, поскольку я хочу работать с существующей базой данных, у меня возникнет вопрос, какой GenerationType я должен использовать для автоматической генерации моего идентификатора?

package models;
import javax.persistence.*;    
@Entity
public class Airroute {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Long id;    
    public String label;        
    public String spokenname;        
    public Boolean internal;        
    public String descr;        
    public String direction;
}

ОБНОВЛЕНО

Maxsim=# \d+ "KCYN-GOLD-USMC_3_141_553".airroute
                    Table "KCYN-GOLD-USMC_3_141_553.airroute"
   Column   |      Type      | Modifiers | Storage  | Stats target | Description
------------+----------------+-----------+----------+--------------+-------------
 id         | numeric(11,0)  | not null  | main     |              |
 label      | character(8)   |           | extended |              |
 spokenname | character(60)  |           | extended |              |
 internal   | boolean        |           | plain    |              |
 descr      | character(250) |           | extended |              |
 direction  | character(1)   |           | extended |              |
Indexes:
    "airroute_pkey" PRIMARY KEY, btree (id)

1 Ответ

0 голосов
/ 07 января 2019

Как сказал бы любой документ JPA,

  • AUTO означает, что провайдер JPA может делать все, что ему нравится (так что вы можете не получить того, что хотите)
  • SEQUENCE будет использовать ПОСЛЕДОВАТЕЛЬНОСТЬ в СУБД (которую поддерживает Postgresql, поэтому опция для вашего случая)
  • TABLE создаст таблицу в БД для хранения значений идентификаторов (также вариант для вашего случая)
  • IDENTITY потребуется тип столбца SERIAL, которого у вас нет в этом столбце ( не вариант ).

Для SEQUENCE и TABLE провайдер JPA должен иметь возможность создавать либо SEQUENCE, либо TABLE соответственно в этой схеме (и быть настроенным для этого)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...