1

我正在尝试将一些遗留(现有)表映射到我的域对象。到目前为止,使用单个 1:n 映射它工作得相当好。我有一个映射到 Item_Alias (YFS_ITEM_ALIAS) 表 (OmsItemAlias) 的 ITEM 或 YFS_ITEM 表。我的对象外观如下所示的关联。

当我在 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'


   }

}

我很确定我在belongTo/hasMany 方面做错了什么。它适用于别名,但对inventoryItems 没有任何作用。任何建议表示赞赏!

4

1 回答 1

0

我可以看到几件事。

我认为不是fetch: 'eager'有效的获取类型:请参阅 Fetch

您可能想要的是:lazy: false请参阅 Fetching

现在我也认为你可能想要加入而不是选择,所以也许(我不能保证这是完全正确的,但我希望让你走上正轨):

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

在 InventoryItem 映射中:

invItem column: 'ITEM_ID'

现在可以打开 Hibernate 日志以查看 SQL 级别发生了什么

在 Config.groovy 中找到 log4j 设置并添加:

trace 'org.hibernate.SQL'

另请参阅常见问题解答

最重要的是,您在每个数据源设置上打开 SQL 日志记录

...或者甚至在必要时尝试P6 插件,这应该会给您更多关于正在生成什么 SQL 的提示

对不起,参考过度杀伤力

于 2012-03-09T00:29:14.140 回答