如何在Java的通用方法中创建安全的createQuery?

如何在Java的通用方法中创建安全的createQuery?,java,jpa,Java,Jpa,我在自己的持久性类中有以下通用方法: @SuppressWarnings("unchecked") public static <T> T getByCondition(Class<T> clazz, String database, Object id){ EntityManager em = getEntityManager(database); Query q = em.createQuery("SELECT t FROM "+clazz.getNa

我在自己的持久性类中有以下通用方法:

@SuppressWarnings("unchecked")
public static <T> T getByCondition(Class<T> clazz, String database, Object id){
    EntityManager em = getEntityManager(database);
    Query q = em.createQuery("SELECT t FROM "+clazz.getName()+" t WHERE t.id = :id").setParameter("id", id);
    T result = (T) q.getSingleResult();
    return result;
}
@SuppressWarnings(“未选中”)
公共静态T getByCondition(类clazz、字符串数据库、对象id){
EntityManager em=getEntityManager(数据库);
Query q=em.createQuery(“从“+clazz.getName()+”t中选择t,其中t.id=:id”).setParameter(“id”,id);
T result=(T)q.getSingleResult();
返回结果;
}
该方法工作得很好,但我担心查询中的
“+clazz.getName()+”
,因为我不太确定这是否会导致sql注入

有没有更好的方法来声明我要在查询中搜索的类


提前感谢您的回答。:-)

您发布的代码是安全的,因为类是最终的,不能扩展,并且与它所表示的类有着不可分割的联系,这意味着您将无法向它传递一个伪类,其中
getName()
返回一个自定义字符串,而且您不能拥有包含使用SQL注入所需标点的类名。e、 这是不可能的:

class ' or '1'='1; DROP TABLE USERS; --

谢谢你的回答。:)