我在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/