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:Modifier 'static' はここでは使用できません。

私が間違っていることを知っている人はいますか?Groovyの制約をJavaドメインクラスに適用する正しい方法は何ですか?

どうもありがとう、ヴィート

4

1 に答える 1

2

Hibernateドメインで制約スクリプトを使用する場合、セクション15.3Grailsドキュメントの制約の追加classで説明されているように宣言またはstatic修飾子を使用しません。

正しい制約スクリプトは次のようになります。

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

制約のないフィールドとフィールド宣言の括弧はオプションであることに注意してください。

于 2012-02-12T20:32:36.473 に答える