Grails 2.5.0持久化对象的空id

Grails 2.5.0持久化对象的空id,grails,gorm,Grails,Gorm,当我试图保存receiveTransaction时,会出现此异常 原因:org.postgresql.util.PSQLException:错误:“letter_id”列中的null值违反了not null约束 详细信息:失败的行包含(5,0,RECEIVE,67,nraed,2015-06-22 12:56:17.111,null,3,null,1,f,1,DONE,ps.police.parchive.letterransation,null)。 位于org.postgresql.core.

当我试图保存receiveTransaction时,会出现此异常

原因:org.postgresql.util.PSQLException:错误:“letter_id”列中的null值违反了not null约束 详细信息:失败的行包含(5,0,RECEIVE,67,nraed,2015-06-22 12:56:17.111,null,3,null,1,f,1,DONE,ps.police.parchive.letterransation,null)。 位于org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2161) 位于org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1890) 位于org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) 位于org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:560) 位于org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417) 位于org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:363) ... 9更多

这封信有许多信件

LetterTransaction域:

class LetterTransaction {
ActionEnum action
Date dateTime
Party party
ArchiveStructure archiveStructure
Boolean reviewed = Boolean.FALSE
TransactionStatus status=TransactionStatus.PENDING
String notes
Long sequence
LetterTransaction relatedTransaction

RelatedLetter relatedLetter
List signs          = new ArrayList()
List reviewLogs     = new ArrayList()
List divisionPathes = new ArrayList()
List targets = new ArrayList()
String createdBy
boolean deleted

static transients = ['deleted']

static belongsTo = [letter:Letter]
static hasMany = [
        targets:Party,
        // related letters in case this letter is related to other letters (Attachments)

        // actions have bean specified by organization manager التاشيرات
        signs:Sign,
        // all reviewing actions have bean taken for this letter
        reviewLogs:ReviewLog,
        // this devision path describes where scans have bean saved, according the ArchiveStructure for this letter
        divisionPathes:DivisionPath
]
}

内部控制器

    LetterTransaction sendTransactionInstance = LetterTransaction.get(params.long("transactionId"))
    LetterTransaction receiveTransaction=new LetterTransaction()
    receiveTransaction.action=ActionEnum.RECEIVE
    receiveTransaction.letter=Letter.get(sendTransactionInstance.letter.id)
    receiveTransaction.status=TransactionStatus.DONE
    receiveTransaction.relatedTransaction=sendTransactionInstance
    receiveTransaction.party=InternalDepartment.findByCoreId(session.departmentId)
    receiveTransaction.dateTime=new Date()
    receiveTransaction.sequence=params.long("sequence")
    receiveTransaction.targets=[sendTransactionInstance?.party]
    receiveTransaction.notes = params.comments
    receiveTransaction.archiveStructure = ArchiveStructure.get(params.long("archiveStructure.id"))

    if(!receiveTransaction.hasErrors() && receiveTransaction.save(flush: true,failOnError: true)){
        sendTransactionInstance.letter.addToTransactions(receiveTransaction)
        sendTransactionInstance.letter.save(flush: true,failOnError: true)
        //copy all scans to the new folder
        manageService.copyLetterScansFromOrganization(sendTransactionInstance, sendTransactionInstance?.party?.coreId,null, getCurrentUser())
        render "OK"
    }else{
        def errors=g.renderErrors(bean: receiveTransaction)
        render errors
    }

在不知道原因的情况下,我通过在添加letterTransaction后保存letter实例而不是保存receiveTransaction来修复此问题。。这太奇怪了。

确保
Letter.get(sendTransactionInstance.Letter.id)
不是
null
Letter中的Letter可以为null false。。LetterTransaction属于letter,因此不能为空