Ограничения Grails с помощью классов Java и отображений Hibernate - PullRequest
0 голосов
/ 12 февраля 2012

У меня есть следующий класс Java, определенный в src / 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
}

У меня есть файл hbm.cfg.xml, определенный в conf / hibernate следующим образом:

<?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 / hibernate:

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

И, наконец, у меня есть файл AirportHbmConstraints.groovy в папке src / java:

package org.davisworld.trip

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

Когда я пытаюсь запустить приложение, я получаю эту ошибку, когда Spring инициализирует контекст веб-приложения:

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: модификатор «static» здесь не разрешен.

Кто-нибудь знает, что я делаю не так? Как правильно применять ограничения в Groovy к классу домена Java?

Большое спасибо, Vito

1 Ответ

2 голосов
/ 13 февраля 2012

При использовании сценариев ограничений с доменом Hibernate вы не используете объявление class или модификатор static, как описано в разделе 15.3 Добавление ограничений документации Grails.

Правильный сценарий ограничения:

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

Обратите внимание, что поля без ограничения и скобки в объявлении поля являются необязательными.

...