【问题标题】:how to retrieve a column value by passing another column value如何通过传递另一个列值来检索列值
【发布时间】:2014-07-18 21:27:32
【问题描述】:

我有一个具有 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 中接收时,我什么也得不到。

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

任何机构都可以解决我的问题吗?

【问题讨论】:

  • ClientParentQuestion的代码在哪里?
  • 你能更新你的问题给大家看吗?
  • 好的,很高兴听到这个消息!
  • @geo我还有一个问题,你能帮帮我吗?如果可以,请来我的chat room,因为我们不能在这里谈论话题

标签: mysql spring hibernate jpa hql


【解决方案1】:

您的代码容易受到SQL injection 的攻击。

所以客户端对自己有一个自我引用。

我将 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 投影习语。

【讨论】:

  • 感谢您的回答,我按照您的方式做了,但没有得到任何价值
  • 检查我更新的响应,cid 是客户端对象而不是字符串。假设它的 id 是作为字符串参数传递的,这就是查询的样子。我也看不到客户端的 pid 是什么。是数字吗?
  • 另外,您发送了一个字符串参数 (cid),并且您希望匹配 Client.cid.id,即客户端的父 ID。检查我更新的代码。
  • 我还有一个与这个问题无关的问题。你能来我的chat room
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 2020-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多