我已經閱讀了大量的文章和文檔,並且必須缺少一些東西。我可以通過關聯(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