Grails: mapeamento de classe de domínio (coleção de tipos de usuário de hibernação)
Gostaria de saber se é possível implementar o seguinte modelo de domínio.
Vamos ter uma classe de domínio que contém um conjunto de intervalos (tempo de joda). Posso usar o tipo de usuário de hibernação org.joda.time.contrib.hibernate.PersistentInterval para mapeamento de Intervalo para a tabela do banco de dados (de maneira semelhante a emhttp://www.grails.org/JodaTime+Plugin) No entanto, não consigo descobrir como implementar o mapeamento se tiver definido um intervalo, não apenas um intervalo.
Exemplo:
class Activity {
...
Set intervals = []
...
static hasMany = [
intervals: org.joda.time.Interval
]
// This is incorrect implementation, I have set of intervals
// and this would be correct if I had only one interval
// How to implement mapping in this case?
static mapping = {
intervals type: PersistentInterval, {
column name: "start"
column name: "end"
}
}
}
A implementação acima falha com o seguinte erro:
23-10-2010 18: 30: 25,483 [principal] Contexto do ERRO.GrailsContextLoader - Erro ao executar autoinicialização: Erro ao criar bean com o nome 'messageSource': Falha na inicialização do bean; a exceção aninhada é org.springframework.beans.factory.BeanCreationException: Erro ao criar o bean com o nome 'transactionManager': Não é possível resolver a referência ao bean 'sessionFactory' enquanto define a propriedade do bean 'sessionFactory'; a exceção aninhada é org.springframework.beans.factory.BeanCreationException: Erro ao criar bean com o nome 'sessionFactory': Falha na invocação do método init; a exceção aninhada é org.hibernate.MappingException: chave estrangeira (FK4FDC5B1E5107CA0: activity_intervals [start, end]))) deve ter o mesmo número de colunas que a chave primária referenciada (atividade [id]) org.springframework.beans.factory.BeanCreationException: erro criando bean com o nome 'messageSource': falha na inicialização do bean; a exceção aninhada é org.springframework.beans.factory.BeanCreationException: Erro ao criar o bean com o nome 'transactionManager': Não é possível resolver a referência ao bean 'sessionFactory' enquanto define a propriedade do bean 'sessionFactory'; a exceção aninhada é org.springframework.beans.factory.BeanCreationException: Erro ao criar bean com o nome 'sessionFactory': Falha na invocação do método init; a exceção aninhada é org.hibernate.MappingException: chave estrangeira (FK4FDC5B1E5107CA0: activity_intervals [start, end]))) deve ter o mesmo número de colunas que a chave primária referenciada (atividade [id]) em org.grails.tomcat.TomcatServer.start ( TomcatServer.groovy: 212)
Eu pensei que a solução alternativa desse problema é extrair o intervalo para separar a classe de domínio que estende o intervalo e especificar o mapeamento dentro dele. No entanto, o intervalo é a classe final, portanto, a extensão não é possível.
Obrigado por seus conselhos.