Аннотация @Transactional не работает в Grails - PullRequest
0 голосов
/ 25 октября 2018

Существует класс домена Grails 2.5.6, содержащий

class Mapping {
    String xKey
    // other keys, constraints and methods...
}

, и класс обслуживания Grails, содержащий

import grails.transaction.Transactional

@Transactional
class MappingService {

    def byXKey(String xKey) {
        Mapping.findByXKey(xKey)
    }
}

Вызов byXKey приводит к

java.lang.NullPointerException at
org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130) at
org.codehaus.groovy.grails.orm.support.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:87) at
MappingService.byXKey(MappingService.groovy) at 
...

непосредственно перед тем, как код в классе обслуживания будет достигнут.Выполнение Mapping.findByXKey(xKey) в другой службе приводит к тому же исключению.

Что здесь может быть не так?

Sidenote : Если я пытаюсь использовать

import org.springframework.transaction.annotation.Transactional

Вместо этого, как предлагается в другом контексте , результирующее исключение составляет

org.springframework.dao.DataAccessResourceFailureException: Could not obtain current Hibernate Session; nested exception is 
org.hibernate.HibernateException: No Session found for current thread at 
org.codehaus.groovy.grails.orm.hibernate.GrailsHibernateTemplate.getSession(GrailsHibernateTemplate.java:219) at 
org.codehaus.groovy.grails.orm.hibernate.GrailsHibernateTemplate.doExecute(GrailsHibernateTemplate.java:175) at 
org.codehaus.groovy.grails.orm.hibernate.GrailsHibernateTemplate.execute(GrailsHibernateTemplate.java:132) at 
org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractFindByPersistentMethod.doInvokeInternalWithExpressions(AbstractFindByPersistentMethod.java:62) 
...

только при выполнении строки внутри метода службы.

...