如何在JPQL查询中传递多个列表

时间:2016-07-19 06:06:04

标签: java sql oracle jpa

我有这样的表

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中有没有特定的方法来实现这个目标?

2 个答案:

答案 0 :(得分:0)

我想我理解你在问什么,给出如何返回匹配的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;


}

答案 1 :(得分:0)

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