导致数据修改的查询不允许使用grails

时间:2014-03-01 16:32:03

标签: mysql hibernate grails gorm transactional

在我目前的应用程序中,我有一个服务,它使用saxparser来读取一些xml。在saxparser中,我尝试将新对象存储到数据库中,但是我收到以下错误:

ERROR util.JDBCExceptionReporter  - Connection is read-only. Queries leading to data  modification are not allowed

我的服务如下:

@Transactional
class SchedulingService {

   def printIets() {
    LessonParser par = new LessonParser()
    print "de service macheert ier e trut"

    par.parse(["src/data/tweede/"])

   }
}

解析器:

class LessonParser {

public void parse(baseFileLocations){
     ....
      SAXParserFactory factory = SAXParserFactory.newInstance();
      SAXParser saxParser = factory.newSAXParser();

      LessonHandler handler = new LessonHandler()             
      saxParser.parse(is, handler);

     ...

    }
}

最后,尝试将某些内容保存到数据库中的处理程序

class LessonHandler extends DefaultHandler{
    @Override
public void endElement(String uri, String localName, String qName) throws SAXException {

    if (qName.equalsIgnoreCase("TTSession")) {
        //voorlopig enkel hoorcolleges
        if (parse && this.courseType == CourseType.HC) {
            Course course = new Course (name:this.name , info:this.info,courseType:this.courseType,creator:this.creator)
            course.save()

        }
    }
}
}

当我尝试在上述处理程序中保存课程时发生错误。 我也在使用mysql数据库

2 个答案:

答案 0 :(得分:2)

我已将服务连接到一个安静的api,我在那里忘记了@transactional定义。添加它就可以了解

答案 1 :(得分:0)

感谢分享。

该服务获得了“@Transactional(readOnly = true)”定义。因此所有方法都是只读的。

如果您想进行一些修改,则需要在方法之前添加“@Transactional”。