0

我在 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 域类的正确方法是什么?

非常感谢,维托

4

1 回答 1

2

当使用带有 Hibernate 域的约束脚本时,您不使用class声明或static修饰符,如Grails 文档的第15.3 节添加约束中所述。

正确的约束脚本是:

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

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

于 2012-02-12T20:32:36.473 回答