Как использовать имя поля одного класса в методе другого класса, чтобы получить проблему с компилятором при изменении имени - PullRequest
0 голосов
/ 08 января 2020

Я хочу отнести имя поля в одном классе java к другому, так что я получу по крайней мере ошибку компилятора, когда кто-то изменит имя поля в базовом классе.

Пример:

@Entity
class Employee {

    public String userId;
    public String timestampCreate;

}

class EmployeeReport {

    public Page<Employee> getEmployees() {

        return page = employeeJpaRepository.findAll(pageNumber, pageSize,
                Sort.by(Sort.Direction.DESC, "timestampCreate"));

    }

}

Здесь timestampCreate - это имя поля класса Employee.

Я не хочу жестко задавать имя столбца; так как это плохая практика, и вы хотите, чтобы она была в будущем, в случае изменения имени поля например, если кто-то изменит имя столбца timestampCreate на timestamp, то при аренде я хотел бы увидеть ошибку компилятора в классе EmployeeReport.

Пожалуйста, предложите идею. Спасибо!

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

Ответы [ 2 ]

0 голосов
/ 10 января 2020

Вы можете заставить это работать, используя Querydsl или метамодель JPA. Основная идея заключается в том, что вы регистрируете APT, который будет генерировать типы метамоделей, которые поочередно представляют поля сущности как свойства. Например, Hibernate APT создаст тип Employee_, содержащий публикуемое c поле timestampCreate. Затем вы можете использовать эти свойства для создания безопасных Sort экземпляров с помощью

new JpaSort(Employee_.timestampCreate)

. Вы можете даже создавать вложенные пути, используя метод stati c path для JpaSort:

new JpaSort(JpaSort.path(Department_.head).dot(Employee_.timestampCreate));

Это предполагает дополнительный тип сущности Department со свойством head типа Employee.

0 голосов
/ 08 января 2020

Вы не можете из коробки, но вы можете использовать аннотации или отражения. IMO, это уродливые решения для такого варианта использования, подробности смотрите в следующих ответах. имя эквивалента в Java

...