Grails 2.5.0持久化对象的空id
当我试图保存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域: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.
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,因此不能为空