Spring JpaRepository getOne () для таблицы с PK в качестве строки - PullRequest
0 голосов
/ 28 апреля 2019

Я использую Spring Boot с JpaRepository.У меня есть таблица, определенная с PK, которая является строкой.

CREATE TABLE mytable (
    uuid uuid DEFAULT gen_random_uuid() PRIMARY KEY,
    url text NOT NULL,
    status status DEFAULT 'pending' NOT NULL,
    created_at timestamp with time zone DEFAULT now() NOT NULL
);

Вопрос

В JpaRepository, как мне сделать эквивалент getOne(uuid)?(getOne(uuid) получает параметр типа Long), т. Е. Как получить одну строку для идентификатора UUID типа String?

Код

@Entity
@Table(name = "mytable")
public class MyTableEntity {

    public enum Status {
        pending,
        complete,
        processing,
        failed
    }

    @Id
    @Column(name = "uuid")
    //@GeneratedValue(strategy = GenerationType.AUTO)
    private String uuid;

    @Column(name = "url", nullable = false)
    private String url;

    @Enumerated(EnumType.STRING)
    @Column(columnDefinition = "photo_status", nullable = false)
    //@Type( type = "pgsql_enum" )
    private Status status;

    @Column(name = "created_at", nullable = false)
    private LocalDateTime created_at;

Хранилище

public interface MyRepository extends JpaRepository<MyTableEntity, Long> {
}

1 Ответ

1 голос
/ 28 апреля 2019

Итак, если у вашей сущности есть строковый ключ, вы можете использовать такую ​​декларацию вашего Repository:

@Repository
public interface MyRepository extends JpaRepository<MyTableEntity, String> {
}

Теперь, если вы хотите получить сущность по id, который имеет тип String, вы можете использовать, например:

private void someMethod() {
    UUID uuid = UUID.randomUUID();
    MyTableEntity myEntity = myRepository.getOne(uuid.toString());
}

Если вы посмотрите на определение JpaRepository, оно ожидает, что первый тип будет вашим классом сущности, а второй - типом ключа этой сущности:

public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...