Как заставить Hibernate игнорировать метод?

Этот вопрос по существу является противоположностью этого.

У меня есть такой способ:

public boolean isVacant() {
    return getEmployeeNum() != null && getEmployeeNum().equals("00000000");
}

Когда я загружаю его, Hibernate жалуется, что у меня нет атрибута vacant. Но мне не нужен атрибут vacant - мне не нужно хранить эти данные - это просто логика.

Hibernate говорит:

org.hibernate.PropertyNotFoundException: Не удалось найти установщик для свойства, свободного в классе com.mycomp.myclass...

Есть ли аннотация, которую я могу добавить к моему методу isVacant(), чтобы заставить Hibernate игнорировать его?

Ответ 1

Добавьте @Transient к методу, тогда Hibernate должен его игнорировать.

Чтобы процитировать Hibernate Documentation:

Каждое нестационарное непереходное свойство (поле или метод в зависимости от типа доступа) объекта считается постоянным, если вы не аннотируете его как @Transient.

Ответ 2

RNJ правильный, но я могу добавить, почему это происходит:

Я предполагаю, что вы аннотировали получателей вашего постоянного класса. Префиксы, используемые java beans, являются "set" и "get", которые используются для чтения и записи в переменных, но есть также префикс "is", который используется для булевых значений (вместо "get" ), Когда Hibernate видит ваш perster-annotated persistent class и находит метод isVacant, он предполагает, что есть свойство "vacant" и предполагает, что существует также "set" -метод.

Итак, чтобы исправить это, вы могли либо добавить аннотацию @Transient, либо изменить имя своего метода на то, что не начинается с "is". Я не думаю, что это было бы проблемой, если бы ваш класс был аннотирован по полям, а не get-methods.