EntityManager 本机查询语法?
EntityManager Native Query Syntax?
以下方法使用 Java 实体管理器的 createNativeQuery() 方法:
public List<Dog> findDogById(String id) {
List<Dog> resultList = new ArrayList<>();
try {
resultList = persistence.entityManager().createNativeQuery(" SELECT * FROM DOG WHERE ID = '" + id+ "' ", DogEntity.class).getResultList();
} catch (Exception e) {
}
return resultList;
}
我遇到的问题是此方法不是 returning 结果,但我希望它这样做。 IE。当我运行直接通过SQL Developer
进行查询时,我得到了结果,但是方法并不return相同。
我的Syntax
正确吗?我不确定:
" SELECT * FROM DOG WHERE ID = '" + id+ "' "
即'
和 "
都需要吗?
为避免出现问题,您应该使用参数:
Query query = em.createNativeQuery("SELECT * FROM DOG WHERE ID = ?");
query.setParameter(1, id);
您的语法是正确的,但您的代码中还有其他问题。
您正在默默地忽略异常。您可能遇到异常,忽略它然后返回空列表:
try {
resultList = persistence.entityManager().createNativeQuery(" SELECT * FROM DOG WHERE ID = '" + id+ "' ", DogEntity.class).getResultList();
} catch (Exception e) {
// If an exception is thrown in this try block, you are ignoring it.
}
如果您使用没有参数绑定的查询,您可能会遇到 SQL 注入问题。举个例子,如果有人在你的函数中发送 0' OR 1=1--
作为 id,用户会得到一个完整的 Dogs 列表。
使用参数并避免此类问题,查询也更具可读性且不易出错:
.createNativeQuery(" SELECT * FROM DOG WHERE ID = ?1", DogEntity.class)
.setParameter(1, id)
.getResultList();
以下方法使用 Java 实体管理器的 createNativeQuery() 方法:
public List<Dog> findDogById(String id) {
List<Dog> resultList = new ArrayList<>();
try {
resultList = persistence.entityManager().createNativeQuery(" SELECT * FROM DOG WHERE ID = '" + id+ "' ", DogEntity.class).getResultList();
} catch (Exception e) {
}
return resultList;
}
我遇到的问题是此方法不是 returning 结果,但我希望它这样做。 IE。当我运行直接通过SQL Developer
进行查询时,我得到了结果,但是方法并不return相同。
我的Syntax
正确吗?我不确定:
" SELECT * FROM DOG WHERE ID = '" + id+ "' "
即'
和 "
都需要吗?
为避免出现问题,您应该使用参数:
Query query = em.createNativeQuery("SELECT * FROM DOG WHERE ID = ?");
query.setParameter(1, id);
您的语法是正确的,但您的代码中还有其他问题。
您正在默默地忽略异常。您可能遇到异常,忽略它然后返回空列表:
try {
resultList = persistence.entityManager().createNativeQuery(" SELECT * FROM DOG WHERE ID = '" + id+ "' ", DogEntity.class).getResultList();
} catch (Exception e) {
// If an exception is thrown in this try block, you are ignoring it.
}
如果您使用没有参数绑定的查询,您可能会遇到 SQL 注入问题。举个例子,如果有人在你的函数中发送 0' OR 1=1--
作为 id,用户会得到一个完整的 Dogs 列表。
使用参数并避免此类问题,查询也更具可读性且不易出错:
.createNativeQuery(" SELECT * FROM DOG WHERE ID = ?1", DogEntity.class)
.setParameter(1, id)
.getResultList();