gpt4 book ai didi

java - 将实体类参数传递给 createNativeQuery 有何作用?

转载 作者:行者123 更新时间:2023-11-30 06:43:01 29 4
gpt4 key购买 nike

我在 Hibernate 中有一个简单的查找方法:

@Override
public TblUser findByUsername(String username) {
return (TblUser) entityManager.createNativeQuery("SELECT * FROM tblUser WHERE username = ?", TblUser.class)
.setParameter(1, username)
.getSingleResult();
}

将实体类参数传递给createNativeQuery方法有什么作用?我可以通过它,也可以不通过它,无论哪种方式,我都必须使用 java.io.Transaction 来转换查询结果。那么上一个代码片段和这个有什么区别:

@Override
public TblUser findByUsername(String username) {
return (TblUser) entityManager.createNativeQuery("SELECT * FROM tblUser WHERE username = ?")
.setParameter(1, username)
.getSingleResult();
}

documentation提到的唯一区别是我应该使用第一种方法来删除和更新。这是两种方法之间的唯一区别吗?告诉程序员它将返回结果?它会影响编译器吗?

最佳答案

您的第一个查询返回对象[]列表,而不是映射实体。 每个Object[]包含数据库返回的一条记录。 然后,我们需要迭代该数组,将每个对象转换为其特定类型并将它们映射到我们的域模型。 这会产生大量重复代码和类型转换

您的第二个查询需要返回实体的所有属性,并且 JPA 实现(例如 Hibernate)将尝试根据返回的列的名称和类型将它们映射到实体属性。如果成功,EntityManager 将返回由当前持久性上下文管理的完全初始化的 Author 实体的列表。因此,结果与我们使用 JPQL 查询相同,但我们不限于 JPQL 的小功能集。

更多详情请参见

http://www.thoughts-on-java.org/result-set-mapping-basics/

关于java - 将实体类参数传递给 createNativeQuery 有何作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44099240/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com