Я уже видел несколько потоков по этому вопросу, и никто не мог спасти У меня есть следующий в моем DomainClassGrails-нуль идентификатор в записи com.easytha.Student (не сбрасывает сессии после того, как происходит исключение)
def afterInsert() {
elasticSearchService.index(this)
}
Где elasticsaerch - это сервис, и я добавил его в статический список переходных процессов. Кажется, что после вызова метода индексной успешно он бросает это исключение
Message: null id in com.easytha.Student entry (don't flush the Session after an exception occurs)
Это код индексного метода
def index(object) {
try {
if(object==null) {
throw new NullPointerException()
}
if(!(object instanceof Collection || object instanceof Object[])) {
IndexResponse response = client.prepareIndex(grailsApplication.config.esIndexName, object.getClass().getName(),object.id.toString())
.setSource((object as JSON).toString())
.execute().actionGet()
println "object indexed successfully"
}else if(object instanceof Collection || object instanceof Object[]) {
for (var in object) {
index(var)
}
}
}catch(e) {
e.printStackTrace();
}
}
«объект проиндексированы успешно» печатается в консоли.
bootstrap.groovy имеет следующие
Student student4 = new Student(firstName:'Sapan',lastName:'Parikh',email:'[email protected]',password:'test123')
student4.save(failOnError : true)
UPDATE
Я попытался Student.withNewSession { elasticSearchService.index(this) }
, который работал.
что вы делаете в вашем Bootstrap.groovy? вы не укажете здесь код – Motilal
@Motilal Добавлен код начальной загрузки, это простая операция сохранения. Также нет ошибок проверки, я проверил их, напечатав this.errors – Sap
добавьте флеш в свой файл save() и попробуйте перезагрузить приложение student4.save (flush: true, failOnError: true) – Motilal