如何让Hibernate忽略一个方法?

这个问题基本上与这个问题相反。

我有一个像这样的方法:

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

当我加载它时,Hibernate抱怨我没有名为vacant属性。 但我不想要一个名为vacant的属性 – 我不需要存储那些数据 – 它只是逻辑。

Hibernate说:

org.hibernate.PropertyNotFoundException:在com.mycomp.myclass类中找不到属性空置的setter …

是否有一个注释可以添加到我的isVacant()方法中以使Hibernate忽略它?

@Transient添加到方法然后Hibernate应该忽略它。

引用Hibernate文档 :

除非您将实体注释为@Transient ,否则实体的每个非静态非瞬态属性(字段或方法取决于访问类型)都被视为持久性。

RNJ是正确的,但我可能会补充为什么会发生这种情况:

我猜你已经注释了持久化类的getter。 java bean使用的前缀是“set”和“get”,它们用于读取和写入变量,但也有前缀“is”,它用于布尔值(而不是“get”)。 当Hibernate看到你的getter-annotated持久化类,并找到一个方法“isVacant”时,它假定存在一个属性“vacant”,并假设还有一个“set”方法。

因此,要修复它,您可以添加@Transient注释,也可以将方法的名称更改为不以“is”开头的内容。 如果您的类在字段上注释而不是get-methods,我认为这不会是一个问题。