如何通过传递另一个列值来检索列值

时间:2014-05-29 11:27:09

标签: mysql spring hibernate jpa hql

我有一个包含列cid的表客户端。

实体类是

public class client{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @Version
    @Column(name = "version")
    private Integer version;

    @NotNull
    @ManyToOne
    private Client cid;

....
}

在我的会话中,我保留了客户端ID并通过以下方式检索

String clientId = request.getSession().getAttribute("clientId").toString();

这是我的控制器代码

 List l=serviceClientServiceImpl.getSavedParents(clientId);
    uiModel.addAttribute("savedParents",l);

这是我的getSavedParents代码

public List getSavedParents(String cid)
{
    List l=serviceClientDaoImpl.getSavedParents(cid);
    return l;
}

这是我的查询代码

public List getSavedParents(String cid)
{
    String queryString="select distinct pid from ClientParentQuestion where cid="+cid;
    Query query=entityManagerUtil.getQuery(queryString);
    return query.getResultList();
}

当我尝试使用${savedParents}在我的jsp中接收时,我什么都没得到。

我不明白我在哪里弄错了。

任何人都能解决我的问题吗?

1 个答案:

答案 0 :(得分:4)

您的代码容易受到SQL injection的攻击。<​​/ p>

因此,客户可以自我引用。

我将dao方法重构为:

public List getSavedParents(String cid) {
    return getEntityManager()
            .createQuery("select distinct cpq.pid from ClientParentQuestion cpq where cpq.cid.id = :cid")
            .setParameter("cid, Long.valueOf(cid))
            .getResultList();
}

如果要指定要返回或匹配的属性,还可以使用实体的别名。

它更具可读性,它遵循JPQL / HQL投影习语。