【发布时间】:2011-03-02 15:58:14
【问题描述】:
我正在使用休眠注释。如何向 POJO 对象添加方法?例如,我有与数据库关联的“getChildNodes”方法,但我还想添加递归方法“getAllChildNodes”。执行此操作时出现“org.hibernate.PropertyNotFoundException:找不到类中属性进度的设置器”异常。
【问题讨论】:
标签: java hibernate annotations pojo
我正在使用休眠注释。如何向 POJO 对象添加方法?例如,我有与数据库关联的“getChildNodes”方法,但我还想添加递归方法“getAllChildNodes”。执行此操作时出现“org.hibernate.PropertyNotFoundException:找不到类中属性进度的设置器”异常。
【问题讨论】:
标签: java hibernate annotations pojo
定义实体结构的方法有两种。
当在 getter 方法上使用注解时,Hibernate 假定每个 getXxx(以及布尔类型的 isXxx)都代表一个持久属性的定义。即使特定的 getter 不包含任何注释,这也成立,就像您的情况一样。
Hibernate 还期望为每个持久属性找到匹配的 setter 方法。在您的情况下,这就是缺少的内容并导致异常。
您可以通过将自定义 getter 声明为 @Transient 来解决此问题,这表示此 getter 不代表持久属性。另一种方法是将实体转换为在实例变量上使用注释。后者是我个人的选择。
【讨论】:
如果我将此解释为“如何添加与持久性无关的方法”,那么您需要在 getAllChildNodes() 方法上使用 @Transient 注释
【讨论】:
打开 .java 文件并编写一个名为 getAllChildNodes() 的方法。
Hibernate 不会为您编写代码,它会将数据库中的字段映射到您的代码。就这样。如果除了属性的普通 getter 和 setter 之外,您还想在域/模型类中添加额外的逻辑,则必须自己添加它们。
【讨论】: