我有一个包含列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中接收时,我什么都没得到。
我不明白我在哪里弄错了。
任何人都能解决我的问题吗?
答案 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投影习语。