grails - Java类和Hibernate映射的Grails约束

标签 grails grails-domain-class grails-constraints

我在src / java中定义了以下Java类

package org.davisworld.trip;

public class AirportHbm {
  private long id;
  private String name;
  private String iata;
  private String state;
  private String lat;
  private String lng;

  // getters/setters defined
}

我在conf / hibernate中定义了hbm.cfg.xml文件,如下所示:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <mapping resource="AirportHbm.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

我在conf / hibernate中配置了如下的AirportHbm.hbm.xml文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="org.davisworld.trip.AirportHbm" table="usgs_airports">
        <id name="id" column="airport_id">
            <generator class="native"/>
         </id>          
        <property name="name" type="java.lang.String">
            <column name="airport_name" not-null="true" />
        </property>
        <property name="iata" type="java.lang.String">
            <column name="locid" not-null="true" />
        </property>
        <property name="state" />
        <property name="lat" column="latitude" />
        <property name="lng" column="longitude" />
    </class>
</hibernate-mapping>

最后,我在src / java文件夹中有一个AirportHbmConstraints.groovy文件:
package org.davisworld.trip

class AirportHbmConstraints {
    static constraints = {
        name()
        iata(maxSize:3)
        state(maxSize:2)
        lat()
        lng()
    }
}

当我尝试运行应用程序时,Spring初始化Web应用程序上下文时出现以下错误:
Caused by: java.lang.ClassCastException: org.davisworld.trip.AirportHbmConstraints cannot be cast to groovy.lang.Script

我所遵循的教程最初说的是AirportHbmConstraints.groovy文件不应该包含类。它应该只是一个脚本:
package org.davisworld.trip


static constraints = {
        name()
        iata(maxSize:3)
        state(maxSize:2)
        lat()
        lng()
}

但是当我这样做时,STS给了我一个编译器错误:

Groovy:此处不允许使用修饰符“静态”。

有人知道我在做什么错吗?将Groovy中的约束应用于Java域类的正确方法是什么?

非常感谢,
维托

最佳答案

当在Hibernate域中使用约束脚本时,不要使用Grails文档的15.3 Adding Constraints部分中说明的class声明或static修饰符。

正确的约束脚本为:

constraints = {
    iata maxSize: 3
    state maxSize: 2
}

请注意,没有约束的字段以及字段声明上的括号是可选的。

关于grails - Java类和Hibernate映射的Grails约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9251929/

相关文章:

grails - 我可以拆分grails的config.groovy文件吗?

java - 独立的 Java 应用程序可以使用 Grails 模型吗?

ajax - 如何在grails中呈现ajax响应的列表?

grails - 如何为每个类实例设置唯一约束?

json - Grails - 使用 JSON 启动域类

groovy - 域类 insertBefore 的 Grails 单元测试

java - Grails 应用程序未部署在 tomcat 中

grails - Grails-如何从另一个 Controller 保存一个类实例?

grails - 如何从Grails中的inList约束中选择多个值?