Собственный запрос Hibernate не создает автоматически увеличенный первичный ключ - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть таблица, сгенерированная с использованием liquibase, следующим образом

       <createTable tableName="MyTable">
            <column name="id" type="BIGINT" autoIncrement="true">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="a" type="VARCHAR(255)"/>
            <column name="b" type="VARCHAR(255)"/>
            <column name="c" type="BIGINT"/>
            <column name="fk_id" type="BIGINT"/>
        </createTable>

Затем у меня есть собственный запрос, который я использую для сохранения этого объекта

 EntityManager em = session.getEntityManagerFactory().createEntityManager();

        em.getTransaction().begin();
        em.createNativeQuery(
            "INSERT INTO MyTable (a, b, c, fk_id)"
                + " VALUES ( :a, :b, :c, :fk_id)")
            .setParameter("a", myObj.geta().toString())
            .setParameter("b", myObj.getb().toString())
            .setParameter("c", myObj.getc()))
            .setParameter("fk_id",
                myObj.getOtherObj().getId)
            .executeUpdate();
        em.getTransaction().commit();
        em.close();

Я установил аннотацию JPA наАвтоинкремент этого идентификатора выглядит следующим образом

@Id
  @JsonProperty
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  Long id;

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

Также попытался изменить его на

@Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "native")
    @GenericGenerator(name = "native", strategy = "native")
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;

Это, похоже, не сработало

Также пробовал использовать GenerationType.Table и GenerationType.SEQUENCE

Вот SQl, который я вижу

Hibernate: 
    /* dynamic native SQL query */ INSERT 
    INTO
        MyTable
        (a, b, c, d, fk_id) 
    VALUES
        (?, ?, ?, ?, ?)

Затем я регистрирую постоянную сущность, чтобы увидеть, получает ли онаавтоинкрементный идентификатор

INFO  [2019-02-25 16:24:11,611] Successfully persisted myObj: 'null:FK_table{its values} other stuff gets saved' 

Обратите внимание, что столбец идентификатора имеет значение NULL.

Я также явно установил значение идентификатора NULL до выполнения запроса, но все же не повезло, я попытался выполнить тот же запрос, используядругой клиент mysql, и это, кажется, работает

...