【问题标题】:Java, Hibernate annotations, How to add methods to POJO object?Java,Hibernate 注释,如何向 POJO 对象添加方法?
【发布时间】:2011-03-02 15:58:14
【问题描述】:

我正在使用休眠注释。如何向 POJO 对象添加方法?例如,我有与数据库关联的“getChildNodes”方法,但我还想添加递归方法“getAllChildNodes”。执行此操作时出现“org.hibernate.PropertyNotFoundException:找不到类中属性进度的设置器”异常。

【问题讨论】:

    标签: java hibernate annotations pojo


    【解决方案1】:

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

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

    当在 getter 方法上使用注解时,Hibernate 假定每个 getXxx(以及布尔类型的 isXxx)都代表一个持久属性的定义。即使特定的 getter 不包含任何注释,这也成立,就像您的情况一样。

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

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

    【讨论】:

      【解决方案2】:

      如果我将此解释为“如何添加与持久性无关的方法”,那么您需要在 getAllChildNodes() 方法上使用 @Transient 注释

      【讨论】:

      • 我很困惑。添加额外的功能,例如 getAllChildNodes() 或 publish() 是否不再使其不再是 POJO?因此违反了休眠对象必须是 POJO 的设计原则,因此是“坏的”?但是为什么会不好呢?我想这样做,但我不确定这是否正确。
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-15
        • 1970-01-01
        • 1970-01-01
        • 2013-09-23
        • 1970-01-01
        • 1970-01-01
        • 2012-06-09
        • 1970-01-01
        相关资源
        最近更新 更多