2010-03-02 5 views
2

Je suis nouveau à Grails.Essayer d'utiliser une classe de domaine de grails de la coquille

J'essaye d'experiement avec mes domaines de grails de la coquille, et je ne peux pas l'obtenir pour fonctionner. Ces domaines fonctionnent bien à partir du code d'échafaudage lorsque je lance l'application.

Compte tenu de cette classe de domaine

class IncomingCall { 

    String caller_id 
    Date call_time 
    int call_length 

    static constraints = { 
    } 
} 

je tente de créer un « IncomingCall » et enregistrez de la coquille. Peu importe ce que je fais, je reçois toujours "Null"; l'objet n'est pas créé.

Et si j'essaye de créer l'objet et de faire une sauvegarde, j'obtiens l'erreur "Pas de session d'hibernation liée au fil" (voir ci-dessous).

groovy:000> new IncomingCall(caller_id:'555-1212', call_time: new Date(), call_length:10).save() 
ERROR org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here 
     at org.springframework.orm.hibernate3.SpringSessionContext.currentSession (SpringSessionContext.java:63) 
     at org.hibernate.impl.SessionFactoryImpl.getCurrentSession (SessionFactoryImpl.java:574) 
     at groovysh_evaluate.run (groovysh_evaluate:3) 
    ... 
groovy:000> 

Comment est-ce que je peux faire fonctionner ceci à partir du shell?

Répondre

0

Je suis tombé sur ce problème très ennuyeux aussi bien.

Pour résoudre ce problème, exécutez ce code dans la coque pour lier la session de mise en veille prolongée au gestionnaire de synchronisation de transaction:

import org.hibernate.Session 
import org.hibernate.SessionFactory 
import org.springframework.orm.hibernate3.SessionFactoryUtils 
import org.springframework.orm.hibernate3.SessionHolder 
import org.springframework.transaction.support.TransactionSynchronizationManager 
sessionFactory = ctx.getBean("sessionFactory") 
session = SessionFactoryUtils.getSession(sessionFactory, true) 
TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session)) 

Après cela est fait, les objets de domaine devraient fonctionner comme prévu.

0

J'ai découvert que l'utilisation de classes de domaine Grails du shell ne fonctionne généralement pas bien. Une chose que je remarque est que vous n'avez aucune déclaration d'importation. Si vos classes sont en com.my.domain paquet avant d'essayer de créer et instance de la classe que vous devez faire

import com.my.domain.* 
Questions connexes