Как сгенерировать строковый первичный ключ в базе данных и определить его с помощью аннотаций JPA - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу иметь сущность со строкой pk, которая генерируется базой данных с префиксом c и последовательностью. Я получаю эту ошибку, когда пытаюсь вставить новую строку через приложение Spring. Может ли кто-нибудь мне помочь?

Моя ошибка:

"Unknown integral data type for ids : java.lang.String; nested exception is org.hibernate.id.IdentifierGenerationException: Unknown integral data type for ids : java.lang.String"

Моя таблица sql:

CREATE sequence octo_reference_code;

SELECT setval('octo_reference_code', 1010);

create table user_references
(
code text not null default 'octo' || nextval('octo_reference_code')
    constraint user_references_pk
        primary key,
user_id uuid
    constraint user_references_users_id_fk
        references users,
create_date timestamptz default now()
);

Определение моего класса сущности pk:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "code", columnDefinition = "text", nullable = false, updatable = false)
public String getCode() {
    return code;
}

public void setCode(String code) {
    this.code = code;
}

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Вы можете определить, что ваш идентификатор использует последовательность, которую вы определили в вашей базе данных, для этого вы можете добавить следующее:

    @Id
    @SequenceGenerator(name = "octo_reference_code", sequenceName = "octo_reference_code", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "octo_reference_code")
    @Column(name = "code")
    public String getCode() {
        return code;
    }
0 голосов
/ 30 апреля 2020

Вам нужно привести последовательность к ТЕКСТУ. Добавьте ::TEXT к концу nextval() вызова:

code text not null default 'octo' || nextval('octo_reference_code')::TEXT

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