Как мне создать метод репозитория, который ищет встроенное значение? - PullRequest
0 голосов
/ 18 июня 2019

У меня есть встраиваемый класс для хранения ссылочного идентификатора, потому что я не хочу повторять детали столбца в каждой сущности JPA.

@Data
@Embeddable
public class BusinessReference {
    private static final int LENGTH = 64;

    @Column(
        columnDefinition = "VARCHAR(64)",
        length = LENGTH,
        updatable = false,
        nullable = false,
        unique = true)
    @Size(min = LENGTH, max = LENGTH)
    @Pattern(regexp = "^[!-~]+$")
    private String referenceId;

}

Теперь у меня есть сущность

@Data
@Entity
public class Sample {
    @Id
    @GeneratedValue
    @Column(
        updatable = false,
        nullable = false,
        columnDefinition = "BINARY(16)")
    private UUID id;

    @Embedded
    private BusinessReference businessReference;

}

То, что я хочу сделать, - это создать общий интерфейс, который позволил бы мне осуществлять поиск по идентификатору ссылки, который я могу использовать для расширения еще одного CrudRepository, если это необходимо.Обратите внимание, что мне нужен параметр String, а не объект.

public interface BusinessReferenceRepository<T> {
    Optional<T> getByBusinessReference(String referenceId);
}

1 Ответ

0 голосов
/ 18 июня 2019

Я решил это, создав default, который позволил бы мне вызывать его по исходному типу.

public interface BusinessReferenceRepository<T> {
    Optional<T> getByBusinessReference(BusinessReference businessReference);

    default Optional<T> getByBusinessReference(String referenceId) {
        return getByBusinessReference(new BusinessReference(referenceId));
    }
}

...