Сбой автопривязки классов Java в Grails

У меня есть проект Grails (2.3.8), который интегрируется с несколькими классами Java. Когда я пытаюсь связать данные с отношением один ко многим, я получаю следующую ошибку:

{
  "errors": 
  [
    {
      "object": "com.sample.Author",
      "message": "No such field: referencedPropertyType for class: org.codehaus.groovy.grails.orm.hibernate.GrailsHibernateDomainClassProperty"
    }
  ]
}

Кто-нибудь знает, почему функция привязки данных пытается связать «referencePropertyType»?

Я включил упрощенную версию своего проекта с автором и книгами, добавленными в папку src/java.

Автор.java

@Entity
public class Author {

    private long _id;
    private List<Books> _books;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "author")
    public List<Book> getBooks() {
        return _books;
    }

    // getters and setters

}

Book.java

@Entity
public class Book {

    private long _id;
    private Author author;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "AUTHOR_ID", foreignKey = @ForeignKey(name = "author_fk"), nullable = false)
    public Author getAuthor() {
        return _author;
    }

    // getters and setters

}

hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <mapping class="com.sample.Author" />
        <mapping class="com.sample.Book" />
    </session-factory>

</hibernate-configuration>

Авторконтроллер.groovy

class AuthorController {

    def doSomething() {
        def authorInstance = new Author(params)

        if(authorInstance.hasErrors()) {
            println authorInstance.errors as JSON
        }
    }
}

person arcdegree    schedule 06.06.2014    source источник
comment
Разве вы не хотите сделать это с помощью Grails? Использовать классы предметной области?   -  person Mr. Cat    schedule 06.06.2014
comment
К сожалению, это не вариант для этого проекта. Классы, которые мне нужно использовать, используются совместно с другими Java-приложениями.   -  person arcdegree    schedule 06.06.2014


Ответы (2)


Кто-нибудь знает, почему функция привязки данных пытается связать «referencePropertyType»?

Функция привязки данных не пытается привязать referencedPropertyType. Связыватель пытается получить это значение, потому что это значение помогает связывателю данных выяснить, какие типы объектов необходимо создать во время связывания данных.

Похоже, что в определенных обстоятельствах при использовании плагина Hibernate может возникнуть ошибка в отношении моделей предметной области Java. Если вы отправите отчет об ошибке на странице https://jira.grails.org/browse/GRAILS и прикрепите простой образец приложения, мы все исправим.

Извините за неприятности.

person Jeff Scott Brown    schedule 06.06.2014
comment
Может ли быть временный обходной путь, добавив это поле специально в класс? Как это обычно выглядело бы? - person arcdegree; 06.06.2014
comment
Нет. Система не ищет referencedPropertyType в вашем классе. Система ищет поле referencedPropertyType в GrailsHibernateDomainClassProperty. Я предполагаю, что проблема в том, что система ищет поле, когда она также должна поддерживать свойство. Если вы отправите JIRA с простым приложением, чтобы воспроизвести проблему, я могу ее исправить. - person Jeff Scott Brown; 06.06.2014
comment
Я создал пример приложения в версии 2.4.0 и не увидел проблемы, поэтому обновил свое приложение, и, похоже, проблема была решена. - person arcdegree; 07.06.2014

После обновления моего проекта с 2.3.8 до 2.4.0 проблема была решена. Похоже, это была ошибка, но обновление проекта решило проблему.

person arcdegree    schedule 06.06.2014