记录--关于DetachedCriteria离线查询

一个下午还没解决!!!!!!!!!
首先,咱们先拟定三张表,仓库表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 )
以下是具体实现代码:

//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 实在看不下去,阿玛尼光芒 的英文!!!!!!!
现在记录下,望解决!!
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面分别给出使用JDBC和Hibernate实现嵌套查询和嵌套结果的代码示例。 使用JDBC实现嵌套查询和嵌套结果的示例代码: ```java // 嵌套查询示例代码 String sql = "SELECT * FROM table1 WHERE id IN (SELECT id FROM table2 WHERE name = ?)"; PreparedStatement stmt1 = connection.prepareStatement(sql); stmt1.setString(1, "test"); ResultSet rs1 = stmt1.executeQuery(); while (rs1.next()) { // 处理查询结果 } // 嵌套结果示例代码 String sql2 = "SELECT * FROM table1 WHERE id = ?"; PreparedStatement stmt2 = connection.prepareStatement(sql2); stmt2.setInt(1, 1); ResultSet rs2 = stmt2.executeQuery(); while (rs2.next()) { int id = rs2.getInt("id"); String name = rs2.getString("name"); // 使用前一个查询的结果进行嵌套查询 String sql3 = "SELECT * FROM table2 WHERE id = ?"; PreparedStatement stmt3 = connection.prepareStatement(sql3); stmt3.setInt(1, id); ResultSet rs3 = stmt3.executeQuery(); while (rs3.next()) { String desc = rs3.getString("desc"); // 处理查询结果 } } ``` 使用Hibernate实现嵌套查询和嵌套结果的示例代码: ```java // 嵌套查询示例代码 Criteria criteria1 = session.createCriteria(Table1.class); DetachedCriteria subCriteria = DetachedCriteria.forClass(Table2.class) .add(Restrictions.eq("name", "test")) .setProjection(Projections.property("id")); criteria1.add(Property.forName("id").in(subCriteria)); List<Table1> result1 = criteria1.list(); // 嵌套结果示例代码 Criteria criteria2 = session.createCriteria(Table1.class); criteria2.add(Restrictions.eq("id", 1)); List<Table1> result2 = criteria2.list(); for (Table1 table1 : result2) { int id = table1.getId(); String name = table1.getName(); // 使用前一个查询的结果进行嵌套查询 Criteria criteria3 = session.createCriteria(Table2.class); criteria3.add(Restrictions.eq("id", id)); List<Table2> result3 = criteria3.list(); for (Table2 table2 : result3) { String desc = table2.getDesc(); // 处理查询结果 } } ``` 以上代码仅作为示例,实际使用中需要根据具体情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值