2012-02-12 37 views
0

我在SRC/Java定義的下面的Java類Grails的約束與Java類和Hibernate映射

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 
} 

我已經定義了hbm.cfg.xml文件中的conf /休眠如下:

<?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> 

我有AirportHbm.hbm.xml文件配置爲的conf /休眠如下:

<?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() 
    } 
} 

當我嘗試運行應用程序,我得到當春乃發生初始化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域類的正確方法是什麼?

非常感謝, 維託

回答

2

當使用約束帶腳本一個Hibernate的領域,如Grails文檔的部分15.3 Adding Constraints解釋你不使用class聲明或static修改。

正確的約束腳本是:

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

注意,如果沒有約束字段和對字段聲明的括號是可選的。

+0

修好了!非常感謝@JamesA – 2012-02-12 23:06:43

+0

p.s.感謝您指出Hibernate文檔。我曾經看過那裏,但顯然不夠堅硬。 – 2012-02-13 00:07:50