一个下午还没解决!!!!!!!!!
首先,咱们先拟定三张表,仓库表store,货物表goods,货物进出库历史记录表h istory
首先,咱们先拟定三张表,仓库表store,货物表goods,货物进出库历史记录表h istory
关系如图,store 里面嘛,就是记录仓库有哪些,现在假设里面有 仓库1 和 仓库2
goods 嘛,假设 有 商品1 商品2 ,这两个商品 属于 仓库1;
还有商品3 和商品4 ,这两个商品 属于 仓库2;
history 表中 是关于 商品1 商品2 商品3 和商品4 的进出库记录,现在我们假设 每件商品 都有进出库记录;
现在的问题是:
查询仓库1里面的商品(就是 商品1 商品2 ) 的所有进出库记录?
现在拟用 DetachedCriteria离线查询 ,(就用 DetachedCriteria ,不用HQL,也不要 Criteria )
goods 嘛,假设 有 商品1 商品2 ,这两个商品 属于 仓库1;
还有商品3 和商品4 ,这两个商品 属于 仓库2;
history 表中 是关于 商品1 商品2 商品3 和商品4 的进出库记录,现在我们假设 每件商品 都有进出库记录;
现在的问题是:
查询仓库1里面的商品(就是 商品1 商品2 ) 的所有进出库记录?
现在拟用 DetachedCriteria离线查询 ,(就用 DetachedCriteria ,不用HQL,也不要 Criteria )
以下是具体实现代码:
遇到的具体问题如下
//此处是action
public
class
GoodsAction
extends
ActionSupport
implements
ModelDriven
<
Goods
> {
//省略部分代码
public
String
historyFind(){
History
history1
=
new
History();
DetachedCriteria
detachedCriteria
=
DetachedCriteria.
forClass(
History.
class);
System.
out.
println(
"你查询的信息为简记码:"
+
goods.
getNm()
+
"商品名称"
+
goods.
getName()
+
goods.
getStore().
getId());
if(
goods.
getNm()
!=
null
&&
goods.
getNm().
trim().
length()
>
0){
detachedCriteria.createAlias(
"goods",
"goods").add(Restrictions.eq(
"goods.nm",goods.getNm()));
}
//到这里问题1
if (
goods.
getName()
!=
null
&&
goods.
getName().
trim().
length()
>
0) {
detachedCriteria.
createAlias(
"goods",
"goods").
add(
Restrictions.
like(
"goods.name",
"%"
+
goods.
getName()
+
"%"));
}
//到这里问题2
if (
goods.
getStore()
!=
null
&&
goods.
getStore().
getId().
trim().
length()
>
0) {
// 关联实体对象
detachedCriteria.
createAlias(
"goods",
"goods").
add(
Restrictions.
eq(
"store.id",
goods.
getStore().
getId()));
}
//到这里问题3
goodHistorysList
=
goodsService.
listHistoryGoods(
detachedCriteria);
}
return
"historyFindSUCCESS";
}
}
//这里是service层
public
class
GoodsService {
public
List
<
History
>
listHistoryGoods(
DetachedCriteria
detachedCriteria) {
List
<
History
>
goodHistorysList
=
goodsDAO
.
findByHistory(
detachedCriteria);
// 这里需要,解决延迟抓取,已解决,代码已省略
return
goodHistorysList;
}
}
//这里是DAO
public
class
GoodsDAO
extends
HibernateDaoSupport {
public
List
<
History
>
findByHistory(
DetachedCriteria
detachedCriteria) {
// TODO Auto-generated method stub
return
this.
getHibernateTemplate().
findByCriteria(
detachedCriteria);
}
}
<
s:form
action
=
"goods_historyFind.action"
method
=
"post"
name
=
"select"
theme
=
"simple"
>
<
s:textfield
cssClass
=
"tx"
name
=
"nm"
id
=
"nm"
/>
<
s:textfield
cssClass
=
"tx"
name
=
"name"
id
=
"name"
/>
<
s:textfield
cssClass
=
"tx"
name
=
"store"
id
=
"store"
/>这里还有个提交的按钮~~
</
s:form
>
遇到的具体问题如下
现在我如果不带条件查询的话可以取得history 里面的所有记录并显示
也可以单带条件 nm 进行查询,没报错(问题一代码实现)
可以单带条件 name 进行查询,没报错(问题二代码实现)
如果同时带条件 nm 与 name 查询 的话 会报错,提示 重复 的 goods 知道错在哪里但是目前还不会解决。。。提示 duplicate alias: goods ---------这个问题还比较好解决,虽然目前没解决------------
如果只带条件store查询 的话,果断报错,问题三的 代码不能查询仓库1 和 2 里面商品的具体历史记录。
代码错误重重啊,我实在搞不清楚 DetachedCriteria 如何进行三个表之间的查询,简单的说,不会跨表查询。因为 对于 DetachedCriteria的具体用法还不够熟悉,而且网上 也没有 三个表之间 的 DetachedCriteria 查询!!!!!------太郁闷了,没个参考--------
查了API 实在看不下去,阿玛尼光芒 的英文!!!!!!!
现在记录下,望解决!!
也可以单带条件 nm 进行查询,没报错(问题一代码实现)
可以单带条件 name 进行查询,没报错(问题二代码实现)
如果同时带条件 nm 与 name 查询 的话 会报错,提示 重复 的 goods 知道错在哪里但是目前还不会解决。。。提示 duplicate alias: goods ---------这个问题还比较好解决,虽然目前没解决------------
如果只带条件store查询 的话,果断报错,问题三的 代码不能查询仓库1 和 2 里面商品的具体历史记录。
代码错误重重啊,我实在搞不清楚 DetachedCriteria 如何进行三个表之间的查询,简单的说,不会跨表查询。因为 对于 DetachedCriteria的具体用法还不够熟悉,而且网上 也没有 三个表之间 的 DetachedCriteria 查询!!!!!------太郁闷了,没个参考--------
查了API 实在看不下去,阿玛尼光芒 的英文!!!!!!!
现在记录下,望解决!!