Как указать имя атрибута для использования в графе сущностей? - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь освоить Hibernate и Kotlin, поэтому я определил сущность следующим образом:

@Entity
class VolumeFlow(
        // ...

        @OneToMany(fetch = FetchType.LAZY, mappedBy = "volumeFlow",
                cascade = [CascadeType.ALL])
        private var _volumesPerHour: MutableList<VolumePerHour> = ArrayList()

) {

    var volumesPerHour: List<VolumePerHour>
        get() = Collections.unmodifiableList(_volumesPerHour.toList())
        set(value) {
                _volumesPerHour.clear()
                _volumesPerHour.addAll(value)
        }

}

Здесь VolumePerHour - очень простая сущность, использующая @ManyToOne , Существует один конкретный c вариант использования, когда я хочу загружать их с нетерпением, и я определил средство доступа к репозиторию Spring Data, например:

@EntityGraph(attributePaths = "_volumesPerHour")
List<VolumeFlow> readAllByIdIn(Collection<Integer> ids);

Я полагаю, что это не Hibernate или Spring Data, указанные c , но это просто, как я создаю граф сущностей. Теперь, если вы посмотрите внимательно, аргумент attributePaths равен _volumesPerHour, включая подчеркивание. Неиспользование этого приводит к:

java.lang.IllegalArgumentException: Unable to locate Attribute  with the the given name
    [volumesPerHour] on this ManagedType [VolumeFlow]

Это немного уродливо, поскольку цель свойства publi c и частного поля заключалась в том, чтобы скрыть последнее. Есть ли способы конкретно указать JPA имя атрибута?

...