Я довольно новичок в Java. Я хотел бы знать, можно ли ссылаться на метод или свойство в Java. Это не спецификация c для Hibernate ORM, но просто для того, чтобы дать вам представление, следующий пример записан как классы сущностей Hibernate.
@Entity(name = "Person")
public static class Person {
@Id
private Long id;
private String name;
@OneToMany(mappedBy = "author")
private List<Book> books = new ArrayList<>();
}
@Entity(name = "Book")
public static class Book {
@Id
private Long id;
private String title;
@NaturalId
private String isbn;
@ManyToOne
private Person author;
}
Свойство Person::books
имеет аннотацию OneToMany
с mappedBy
установлен в "author"
, что в конечном итоге ссылается на свойство Book::author
во время компиляции. Я считаю, что это возможно благодаря мощным функциям обратного инжиниринга Java, также известным как Reflection
. Это здорово, но чтобы сделать вещи еще проще и отлаживаемыми, вместо того, чтобы ставить значение String в качестве значения mappedBy
, я бы хотел использовать ссылку put на Book::author
. Это гарантирует, что мы не будем ссылаться на недопустимое свойство на лету (дружественно к IDE). Если мы по ошибке изменим строку на "authors"
, мы не узнаем, что она недействительна, если не скомпилируем код.
Поэтому предпочтительный код для аннотации OneToOne
будет выглядеть следующим образом:
@OneToMany(mappedBy = Book::author)
private List<Book> books = new ArrayList<>();
Я полагаю, что ссылка на метод существует в Objective- C. (и JavaScript тоже хакерским способом).
Как я уже сказал, вопрос в том, есть ли у Java функция ссылки на метод / свойство или какие-либо хаки для этого? Это не указано c для Hibernate ORM. Я говорю о языковой особенности в целом.