2010-06-11 85 views
7

我正在使用hibernate注释。如何将方法添加到POJO对象?例如,我有“getChildNodes”方法,与数据库相关联,但我也想添加递归方法“getAllChildNodes”。我得到“org.hibernate.PropertyNotFoundException:找不到类的属性进度的setter”例外,当我这样做。Java,Hibernate注释,如何向POJO对象添加方法?

+0

显示您的代码。 – Bozho 2010-06-11 13:11:17

回答

9

如果我将其解释为“我怎么添加不涉及持久性的方法”,那么你需要使用@Transient注解放在getAllChildNodes()方法

+0

我很困惑。不添加额外的功能,例如getAllChildNodes()或publish(),使其不再是POJO?因此违反了hibernate对象的设计原则必须是POJO的,因此是“坏”的?但为什么它会不好?我想这样做,但我不确定这是否正确。 – pete 2014-08-28 22:47:15

-1

打开.java文件并编写一个名为getAllChildNodes()的方法。

Hibernate不会为您编写代码,它会将数据库中的字段映射到代码中。就这样。如果你想在你的域/模型类中拥有额外的逻辑,除了你的属性的普通getter和setter,你必须自己添加它们。

1

有定义你的实体结构的两种方法。

  • 上使用您的实体的getter方法的注释你的实体的实例变量或
  • 使用注释

在使用上getter方法的注解,休眠假定每一个的getXxx(和isXxx对于布尔类型)表示持久属性的定义。即使这个特定的getter不包含任何注释,这在你的情况下也是如此。

Hibernate还希望为每个持久性属性找到匹配的setter方法。在你的情况下,这是缺少的并导致异常。

你可以通过声明你的自定义getter为@Transient来解决这个问题,它说这个getter不代表持久性属性。另一种方法是将实体转换为在实例变量上使用注释。后者将是我个人的选择。