我正在尝试将一些旧的(现有)表映射到我的域对象。 到目前为止,通过单个1:n映射,它运行得相当好。我有一个ITEM或YFS_ITEM表,它映射到Item_Alias(YFS_ITEM_ALIAS)表(OmsItemAlias)。我的对象外观如下所示。
当我在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 :(得分:0)
我能看到的一些事情。
我认为fetch: 'eager'
不是有效的获取类型:see Fetch
您可能需要的是:lazy: false
,see Fetching
现在我也认为你可能想要加入而不是选择,所以也许(我不能保证完全正确,但我希望你能走上正轨):
inventoryItems column: 'ITEM_ID', ignoreNotFound: true, fetch: 'join'
并在InventoryItem映射中:
invItem column: 'ITEM_ID'
现在可以打开Hibernate日志以查看SQL级别的内容
在Config.groovy中找到log4j设置并添加:
trace 'org.hibernate.SQL'
另见FAQ
最重要的是,您可以在per datasource设置上启用SQL日志记录
...或者甚至在必要时尝试P6 plugin,这样可以为您提供更多关于生成SQL的提示
对不起参考过度杀伤