2012-03-08 43 views
1

我正試圖將一些遺留(現有)表映射到我的域對象。到目前爲止,使用單一的1:n映射,它工作得相當不錯。我有一個ITEM或YFS_ITEM表映射到Item_Alias(YFS_ITEM_ALIAS)表(OmsItemAlias)。下面顯示了我的對象外觀。映射遺留表和多個hasMany關聯

當我在OmsItem上創建或執行查找時,確實找回了OmsItemAlias對象。問題出現在我查找inventoryItems出於某種原因時始終爲0,即使我知道數據庫中存在項目。

package com.fheg.orderrouter 

class OmsItem { 

String id 
String item 
String description 
Double unitCost 
String defaultProductClass 
String organizationCode 

static hasMany = [ aliases : OmsItemAlias,inventoryItems : InventoryItem] 


static constraints = { 
    id(blank: false, nullable: false) 
    item(nullable: false) 
    description(nullable: false) 
    unitCost(nullable: false) 
    defaultProductClass(nullable: false) 
    organizationCode(nullable: false) 
} 


static mapping = { 
    table 'YFS_ITEM' 
    version false 

    id column:'ITEM_KEY', generator:'assigned', sqlType: 'char(24)' 
    item column: 'ITEM_ID', sqlType: 'char(40)' 
    description(column: 'DESCRIPTION', sqlType: 'varchar2(500)') 
    unitCost column: 'UNIT_COST', sqlType: 'NUMBER(19,6)' 
    defaultProductClass column: 'DEFAULT_PRODUCT_CLASS',sqlType: 'char(10)' 
    organizationCode column: 'ORGANIZATION_CODE', sqlType: 'char(24)' 
    aliases(sort:'aliasName', fetch: 'eager') 
    inventoryItems(fetch: 'eager') 
} 
} 

這裏是InventoryItem的代碼。

package com.fheg.orderrouter 

class InventoryItem { 

String id 
String organizationCode 
String uom 
String productClass 

static belongsTo = [ invItem : OmsItem ] 
static hasMany = [ inventorySupply : InventorySupply] 



static constraints = { 
    id(blank: false, nullable: false) 
    organizationCode(nullable: false) 
//  invItem(nullable: false) 
    uom(nullable: false) 
    productClass(nullable: false) 
} 



static mapping = { 
    table 'YFS_INVENTORY_ITEM' 
    version false 

    id column:'INVENTORY_ITEM_KEY', generator:'assigned' 
    invItem column: 'ITEM_ID' 
    organizationCode column: 'ORGANIZATION_CODE' 
    uom column: 'UOM' 
    productClass column:'PRODUCT_CLASS' 


    } 

} 

我很確定我在做關於belongsTo/hasMany的錯誤。它適用於別名,但對inventoryItems沒有任何作用。任何建議是讚賞!

回答

0

我可以看到一些東西。

我不認爲fetch: 'eager'是一個有效的提取類型:see Fetch

你可能想要的是:lazy: falsesee Fetching

現在還我想你可能想加入而不是選擇,所以也許(這個我不能保證是完全正確的,但我希望把u對應的正確的軌道上):

inventoryItems column: 'ITEM_ID', ignoreNotFound: true, fetch: 'join' 

,並在InventoryItem映射:

invItem column: 'ITEM_ID' 

也許現在打開Hibernate日誌,看看是在SQL級別回事

Config.groovy中找到log4j的設置並添加:

trace 'org.hibernate.SQL' 

另見FAQ

最重要的是,您打開SQL日誌記錄per datasource設置

...甚至嘗試P6 plugin如果必要的話,應該給你更多的是暗示爲正在生成哪些SQL

對不起參考矯枉過正