【问题标题】:How to pass multiple lists in JPQL Query如何在 JPQL 查询中传递多个列表
【发布时间】:2016-07-19 06:06:04
【问题描述】:

我有这样的桌子

VID   CID RID
101   151  BE
114   154  BE
114   155  BE
115   17   LU
115   151  BE
115   155  BE
113   156  BE
113   166  BE

如果用户传递 151 BE 作为输入,我只需要传递 101, 如果用户传递 154 BE 和 155 BE 作为输入,我只需要传递 114

输入 151 BE 或 154 BE 和 155 BE 我将使用 List 传递它。

那么在 java 或 oracle 中实现这一点最有效的方法是什么?

在java中有什么具体的方法可以实现吗?

【问题讨论】:

  • JPQL 依赖于 JPA 实体。您既不引用 JPA 实体也不引用 JPQL 查询。不知道这个“问题”是什么
  • 我猜你的意思是像select top 1 vid from TABLE where cid=? anc rid=? order by vid asc?我不明白这个问题

标签: java sql oracle jpa


【解决方案1】:

我想我明白你在问什么,给出条件列表如何返回匹配的 VID:

如果这是您的实体:

class Entity
{

    private VID vid;
    private RID rid;
    private CID cid;


    public Entity()
    {

    }



    //the proper getter and setters


}

在给定条件的情况下,这就是我构建查询的方式:

//private List<VID> getCommonVID(CID[] cids, RID[] rids) -- could also use an array
private List<VID> getCommonVID(List<CID> cids, List<RID> rids)
{

    String sql = "";
    sql += "SELECT entity.VID FROM TABLE";
        + "WHERE ";

    int cnt = 0;
    int max = rids.length;


    //build sql String
    for(int i = 0; i < max; i++)
    {
        String op = (cnt == 0)? "":" AND ";
        sql += op +  "Entity.CID = :" + String.valueOf(cids.get(i));
        sql += " AND " + "Entity.RID = :" + String.valueOf(rids.get(i));
    }

    Query q = new Query(sql);


    for(int i = 0; i<max; i++)
    {
        q.setParameter(String,valueOf(cids.get(i)), cids.get(i))
        q.setParameter(String,valueOf(rids.get(i)), rids.get(i))
    }

    List<VID> vids = q.getResultList();

    if(vids.size() < 1) return new ArrayList();
    else return vids;


}

【讨论】:

    【解决方案2】:

    我认为在你的情况下(你没有很多行要插入)使用 java.in commons 当我们想要插入大量行时直接使用 dabaseserver(例如迁移......)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 2016-03-29
      • 2014-12-17
      • 2019-01-22
      • 2021-09-21
      • 2018-10-18
      • 1970-01-01
      相关资源
      最近更新 更多