Использование серийного первичного ключа с Postgresql и Hibernate вызывает исключение при вставке нового объекта - PullRequest
0 голосов
/ 22 апреля 2020

Я новичок ie, использующий Hibernate, я пытаюсь сохранить объект в моей таблице Postgresql, но мой столбец с серийным идентификатором вызывает: org.hibernate.TransientObjectException, объявление моего столбца имеет следующий вид:

    @Table (schema = "inventarios", name = "inventory")
    @Entity (name = "inventory")
    public class Inventory implements DAO {

        @Id
        @GeneratedValue (strategy = GenerationType.AUTO, generator = "inventarios.inventory_id_seq")
        @SequenceGenerator (name = "inventarios.inventory_pkey", sequenceName = "inventarios.inventory_id_seq", allocationSize = 1)
        @Column (name = "id")
        private Integer id;
....

И мой метод вставки такой:

@Override
    public int insert(Object o) {
        int lastId = 0;
        Transaction transaction = null;
        try (Session session = ConnectionFactory.getSessionFactory().openSession()) {
            if (o instanceof Inventory) {
                transaction = session.beginTransaction();
                ((Inventory) o).setLastUser(Utils.username);
                lastId = (Integer) session.save(o);
                transaction.commit();
            } else {
                Utils.showErrorDialog("No se pudo crear el registro a inventario, " +
                        "no se encontró la información correcta para realizar el registro.");
            }
        } catch (Exception e) {
            if (transaction != null) {
                transaction.rollback();
            }
            e.printStackTrace();
            ErrorLogger.getInstance().log(e, Inventory.class.getName());
        }
        return lastId;
    }

Я прочитал, что мне нужно грипп sh текущий сеанс, чтобы иметь возможность выполнить вставку, но я не знаю, как это сделать Это.

Раньше у него были эти аннотации, и он хорошо выполняет вставки, но идентификаторы генерировали их очень случайно.

@Id
    @Column (name = "id")
    @GeneratedValue (generator = "native")
    @GenericGenerator (name = "increment", strategy = "increment")
    private Integer id;

Моя Postgresql версия - 9.4, а моя спящая версия - 5.4. 10, какие-либо предложения, пожалуйста?

1 Ответ

0 голосов
/ 23 апреля 2020

Кажется, что я нашел решение:

    @Id
    @GeneratedValue (generator = "inventarios.inventory_id_seq", strategy = GenerationType.AUTO)
    @Column (name = "id")
    private Integer id;

В генераторе я поставил название последовательности моей таблицы, и похоже, что она работает !.

...