Grails GORM mapping пытается получить доступ к полю "класс", которое не существует нигде - PullRequest
1 голос
/ 13 сентября 2011

Это довольно странно.

class Service implements Serializable{

Integer id
String serviceName
String description
SortedSet serviceRequirements

static hasMany = [ serviceRequirements : ServiceRequirement]

static mapping = 
{
    table 'service'

    columns {
        id column:'serviceId'

    }
}}

Результирующий SQL Hibernate при доступе к serviceInstance.serviceRequirements:

  servicereq0_.serviceId as serviceId1_,
    servicereq0_.serviceRequirementId as serviceR1_1_,
    servicereq0_.serviceRequirementId as serviceR1_9_0_,
    servicereq0_.version as version9_0_,
    servicereq0_.description as descript3_9_0_,
    servicereq0_.header as header9_0_,
    servicereq0_.isPersonal as isPersonal9_0_,
    servicereq0_.requirementKey as requirem6_9_0_,
    servicereq0_.required as required9_0_,
    servicereq0_.serviceId as serviceId9_0_,
    servicereq0_.type as type9_0_,
    servicereq0_.weight as weight9_0_,
    servicereq0_.oauthAccessTokenUrl as oauthAc12_9_0_,
    servicereq0_.oauthAuthorizeAdditionalParameters as oauthAu13_9_0_,
    servicereq0_.oauthAuthorizeState as oauthAu14_9_0_,
    servicereq0_.oauthAuthorizeUrl as oauthAu15_9_0_,
    servicereq0_.oauthClientId as oauthCl16_9_0_,
    servicereq0_.oauthClientSecret as oauthCl17_9_0_,
    servicereq0_.oauthRequestTokenUrl as oauthRe18_9_0_,
    servicereq0_.oauthType as oauthType9_0_,
    servicereq0_.class as class9_0_ 

Все поля в порядке, кроме последнего "класса"Он вообще не существует в базе данных или доменном классе с именем ServiceRequirement.

1 Ответ

1 голос
/ 13 сентября 2011

Столбец с именем class автоматически добавляется в таблицу при хранении нескольких классов. Если у класса ServiceRequirement есть подкласс, который также является классом домена, то таблице потребуется столбец class, чтобы узнать, что это за тип ServiceRequirement. Grails, как правило, достаточно умен, чтобы автоматически добавлять столбец, если установлен dbCreate, но вам придется добавить его самостоятельно, если вы управляете своей схемой вручную.

...