У меня есть командный объект, который выглядит следующим образом ...Grails домена внутри командного объекта всегда сохраняет
@Validateable
class ACommand implements Serializable
{
ADomainObject bundleDef
}
я использую форму для заполнения команды затем использовать контроллер, подобный этому
def save(ACommand command)
Я также добавил следующее к моему Config.groovy
grails.gorm.autoFlush = false
проблема даже когда я не вровень (или даже кал l .save()), он по-прежнему сохраняется в БД по возвращении. Кто-нибудь испытал это? Есть ли способ обойти это?
Update
попытался также следующие
def save(ACommand command)
{
try{
service.saveADomainObject(command.adomain) //save called in here if no error
}
catch(Exception e3){
log.error(e3);
command.adomain.discard()
}
// renders ...
}
Это также не работает, даже несмотря на то, сбрасывания называется (я поставил точку останова) он все еще сохраняет.
Update 2
Я изменил мою службу выглядеть следующим образом
adomain.discard()
throw new InvalidObjectException("Blah Blah Blah")
Это, кажется, сохранить в БД непосредственно после того, как выбрасывается ошибка. Я также подтвердил, что мое обслуживание является транзакционным.
Update 3
Добавление моих классов обслуживания для справки
@Transactional(readOnly = true)
def saveADomainObject(def adomain, def test) throws InvalidParameterException, InvalidObjectException, Exception{
if (!test)
{
throw new InvalidParameterException("*")
}
else
{
if (adomain?.id)
{
if (!isValidBundleName(adomain, test))
{
//TODO: Make default.cannot.save.message
throw new InvalidObjectException("*")
}
errors = updateDomain(adomain)
}
else
{
errors = createNewdomain(adomain)
}
if (errors)
{
throw new Exception(errors)
}
}
}
protected def updateDomain(def adomain)
{
adomain.updatedBy = user
String errors=null;
if (adomain.getErrors().allErrors.size() > 0)
{
errors = adomain.getErrors().allErrors.join("\n")
}
return errors
}
private def createNewdomain(def adomain)
{
adomain.createdBy = user
String errors = null
if (adomain.getErrors().allErrors.size() > 0)
{
errors = adomain.getErrors().allErrors.join("\n")
}
return errors
}
Я пробовал это, и он не работает Я могу обновить свой код, если это поможет – Jackie
, если вы покажете тело действия контроллера, которое должно помочь –
добавлена запрашиваемая информация, дайте мне знать, если вам нужно больше – Jackie