Как заставить 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.