Отображение устаревших таблиц и нескольких ассоциаций hasMany - PullRequest
1 голос
/ 08 марта 2012

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

Когда я создаю или выполняю поиск в 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. Он отлично работает для псевдонимов, но ничего не делает для инвентаризации. Любые предложения приветствуются!

1 Ответ

0 голосов
/ 09 марта 2012

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

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

то, что вы можете захотеть, это: lazy: false, см. Извлечение

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

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

и в сопоставлении InventoryItem:

invItem column: 'ITEM_ID'

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

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

trace 'org.hibernate.SQL'

Также см. FAQ

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

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

Извините за ссылку излишнего

...