我已经阅读了大量的文章和文档,并且必须缺少一些东西。我可以通过关联(jointable)从缺失的数据中恢复
在我的应用程序(下面的模型)中,我有一个数据问题,似乎超出了我的控制范围,在CATEGORY表中没有对应行的连接表JOBORDERCATEGORIES中有一个categoryId。我通过JobOrder中的getJobCategories()访问类别数据。这是产生以下错误时,我的类别表缺少参考行:
2012-03-07 08:02:10,223 [quartzScheduler_Worker-1] ERROR listeners.SessionBinderJobListener - Cannot flush Hibernate Sesssion, error will be ignored
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.matrixres.domain.Category#416191]
和我的代码正在停止。
我已经尝试使用ignoreNotFound,但它不帮助我通过上述错误。
如果我错过了关于这个问题的解决方案的帖子,请将其链接到我,否则我们的想法如何前进。也许有一条更直接的路线,我将不得不努力实现我的目标,即获得一份好的分类清单,但我对框架并不熟悉,不知道接下来会发生什么。作为一个说明,我不能写任何这些表。
感谢,丰富
我的模型的简化版本:
工作订单对象:
class JobOrder {
def getJobCategories() {
def cats = []
try {
def jocategories = this.categories
if(!jocategories.isEmpty() && jocategories!=null){
println "we got categories for ${this.id}"
jocategories.each { cat ->
if(cat?.parentCategoryID == 0){
if(cat.occupation != null){
cats << cat.occupation
} else {
cats << cat.name
}
}
}
}
} catch(e) {
cats << "Other Area(s)"
}
cats
}
static mapping = {
table 'dbo.JOBORDER'
version false
id generator: 'identity', column: 'JOBORDERID'
/*
* several other mapped columns deleted here
*/
categories joinTable:[name:'jobOrderCategories', column: 'categoryId', key:'jobOrderID']
}
/*
* several properties deleted here
*/
static hasMany = [categories: Category] //several other hasMany associations exist
}
类别对象:
class Category {
static mapping = {
table 'CATEGORY'
version false
id generator: 'identity', column: 'categoryID'
occupation column: 'OCCUPATION'
name column: 'NAME'
parentCategoryID column: 'PARENTCATEGORYID'
/*
* several other mapped columns deleted here
*/
jobOrders joinTable:[name:'jobOrderCategories', column: 'jobOrderID', key:'categoryId']
}
String name
String occupation
int parentCategoryID
/*
* several properties deleted here
*/
static belongsTo = [JobOrder]
static hasMany = [jobOrders:JobOrder]
}
加入表:
class JobOrderCategories {
static mapping = {
table 'JOBORDERCATEGORIES'
version false
isDeleted column: 'ISDELETED'
jobOrderID column: 'JOBORDERID'
categoryId column: 'CATEGORYID'
}
Boolean isDeleted
Integer jobOrderID
Integer categoryId
}
因为您没有直接的数据库写入权限,您无法写入任何表格吗?你的应用程序没有数据库写入权限?你有更新/删除访问?因为确实,这是一个数据完整性问题,这就是解决方案。所以如果你必须解决它,最有可能会是丑陋的,你可能不得不分解ORM到达你需要的位置(如果真的有必要,我很乐意提供帮助,我以前做过这件事,但它并不是最有趣的事情:/) – 2012-03-07 15:36:34
我访问的数据是只读的,因为它是从供应商(数据所有者)非现场系统同步的。对于我们来说,内部使用本地数据存储而不改变其数据。改变数据打破了他们的单向同步,然后我们必须支付美元,让他们很难将我们的商店重新设置回他们的外部数据。这就是我无法写信给我的意思。 ;)我现在正在努力设法建立一个工作命令处理程序,使我们能够从休眠状态中恢复咳嗽。它真的很难与没有RI的数据一起工作。 – rwheadon 2012-03-07 15:44:16
是的,有限的数据访问和第三方集成确实有点臭:)但我不会开始试图在hibernate上进行隔离。我会写一个更正式的答案,但基本上这个简单的攻击是将id存储为整数,而不是将它们映射到GORM。尽快回复您! – 2012-03-07 16:23:02