2012-03-08 5 views
1

Я пытаюсь сопоставить несколько старых (существующих) таблиц с моими объектами домена. До сих пор с одним отображением 1: n оно работало довольно хорошо. У меня есть таблица ITEM или YFS_ITEM, которая сопоставляется с таблицей Item_Alias ​​(YFS_ITEM_ALIAS) (OmsItemAlias). Мои объекты выглядят ниже для ассоциаций.Сопоставление устаревших таблиц и нескольких hasMany ассоциаций

Когда я создаю или нахожусь на OmsItem, я действительно возвращаю объекты OmsItemAlias. Проблема возникает, когда я ищу инвентарь. По какой-то причине это всегда 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' 


    } 

} 

Я совершенно уверен, что я делаю неправильно в отношении принадлежности/hasMany. Он отлично работает для псевдонимов, но ничего не делает для инвентаря. Любые предложения оцениваются!

ответ

0

Несколько вещей, которые я вижу.

Я не думаю, что fetch: 'eager' является допустимым типом выборки: see Fetch

то, что вы можете это: lazy: false, see Fetching

Теперь же я думаю, что вы, возможно, захотите присоединиться и не выбирает, так что, возможно (это я не могу гарантировать совершенно правильно, но я надеюсь, что ставит U на правильном пути):

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

и в отображении InventoryItem:

invItem column: 'ITEM_ID' 

Теперь возможно включить спящий режим протоколирования, чтобы увидеть, что происходит на уровне SQL

В Config.groovy найти настройки log4j и добавить:

trace 'org.hibernate.SQL' 

Также см FAQ

Кроме того, вы включаете ведение журнала SQL на per datasource настройке

... или даже попробуйте P6 plugin, если необходимо, это должно дать вам больше подсказки относительно того, какой SQL генерируется.

Извините, для справки overkill

Смежные вопросы