Какая польза от создания геттеров и сеттеров в классе, аннотированном @Entity (Hibernate)?

Какая польза от создания геттеров и сеттеров в классе, аннотированном @Entity (Hibernate)? Когда они вызываются?

@Entity
@Table(name = "student")
public class Student {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;
    private String firstName;
    private String lastName;
    public Student() {
    }

    public Student(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
//other getters and setters
}

Просто чтобы добавить к этому, используйте Lombok для ваших геттеров и сеттеров. Просто аннотируйте свой класс с помощью @Getter и @Setter, и вам не нужно заполнять свой класс этими методами доступа. Вы также можете использовать @Data, который включает в себя равенство и хэш-код, но не используйте @Data для своих сущностей.

lane.maxwell 19.02.2023 01:42
1
1
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Как только ваши поля станут закрытыми, вам понадобятся геттеры и сеттеры для доступа к ним вне класса сущностей.

Ответ принят как подходящий

По умолчанию Hibernate использует геттеры и сеттеры для доступа к атрибутам объекта, что считается распространенным подходом.

Однако это не является строго обязательным для Hibernate. Если ваши поля отмечены public, вы можете указать Hibernate обращаться к этим полям напрямую (через опцию public). С другой стороны, имея access, private или default поля/геттеры/сеттеры, Hibernate может работать и с ними (думаю, через рефлексию).

Из Ссылка на Hibernate:

2.1.3. Объявить геттеры и сеттеры для постоянных атрибутов
Стандартный портативный JPA по существу требует этого. В противном случае ваша модель нарушать указанное выше требование в отношении доступа к поля постоянного состояния объекта непосредственно извне объекта сам. Хотя Hibernate этого не требует, рекомендуется следовать Соглашения JavaBean путем определения геттеров и сеттеров для ваших сущностей постоянные атрибуты. Вы по-прежнему можете указать Hibernate для прямого доступа поля сущности. Атрибуты (будь то поля или геттеры/сеттеры) не нужно объявлять общественный. Hibernate может работать с атрибутами, объявленными с помощью public, защищенная, пакетная или частная видимость. Опять же, если вы хотите использовать Генерация прокси во время выполнения для ленивой загрузки видимости для геттер/сеттер должен быть как минимум видимым для пакета.

Другие вопросы по теме