【问题标题】:Using Java beans as Grails domain classes使用 Java bean 作为 Grails 域类
【发布时间】:2011-04-11 10:07:49
【问题描述】:

有很多类似的问题,但我无法准确找到如何在 grails 应用程序中使用 POJO 模型。考虑以下 Java Bean:

package com.example.java;

public class UserBean {

    String name;
    String surname;
    Integer age;

    //--- assume setters and getters here
}

还有一个 grails 域类:

package com.example.grails

class User extends com.example.java.UserBean {

    static constraints = {
        name(blank:false)
        surname()
        age()
    }
}

还有一个带有scaffold=true 的配套控制器。我不确定这是否应该起作用,但我没有看到任何其他建议。这编译并运行良好,直到我尝试从生成的视图中添加一个新用户。然后我得到了

org.hibernate.MappingException: Unknown entity: com.example.grails.User

有什么想法吗?

【问题讨论】:

  • 我认为这是不可能的。你为什么要扩展 POJO 呢? Groovy 会自动为您生成 getter 和 setter……只需将成员变量复制/粘贴到域类中并调用它即可。
  • 如果你已经用 Java 编写了你的​​领域模型,你会怎么写一个 grails 应用程序?
  • 如果你的领域模型是用java用hibernate编写的,你可以在grails中使用你的hibernate映射来使你能够使用你的POJO。我不熟悉如何做到这一点。详情请查看用户指南的“Grails 和 Hibernate”部分。

标签: java grails


【解决方案1】:

您的hibernate.cfg.xml 是什么样的?

确保您的 com.example.grails.User 类已映射:

<hibernate-configuration>
  <session-factory>
   <mapping package="com.example.grails" />
   <mapping class="com.example.grails.User" />
  </session-factory>
</hibernate-configurations>

更多详情可见:http://grails.org/doc/1.0.x/guide/15.%20Grails%20and%20Hibernate.html

【讨论】:

    【解决方案2】:

    我找到了这个问题的答案:this spring.io blog post

    如果您的 Java 域类是休眠映射的,则不要在 grails 中扩展它们。您所要做的就是在名为 UserBeanConstraints.groovy 的单独文件中定义约束:

    constraints = {
        name(blank:false)
        surname()
        age()
    }
    

    【讨论】:

    • 我不知道这里接受自己问题的传统。我想如果它得到投票,我会接受这个。
    • 我认为你一直想要约束而不是子类化;我只是澄清你的答案以及你想要完成的事情,然后接受它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    相关资源
    最近更新 更多