记录使用hibernate时遇到的问题
来源:互联网 发布:java软件eclipse中文版 编辑:程序博客网 时间:2024/05/20 07:37
- 记录hibernate中的一些问题
- 使用entityManagercreateNativeQuery
- 问题
- 解决办法
- 思考的问题
- 使用entityManagercreateNativeQuery
记录hibernate中的一些问题
使用entityManager.createNativeQuery()
在使用entityManager.createNativeQuery()时创建的是原始sql,该方法有2个重载:
- 第一个直接传入原生sql语句:
public Query createNativeQuery(String sqlString) { this.checkOpen(); try { SQLQuery he = this.internalGetSession().createSQLQuery(sqlString); return new QueryImpl(he, this); } catch (RuntimeException var3) { throw this.convert(var3); } }
- 第二个传入原生sql和需要映射的实体类:
public Query createNativeQuery(String sqlString, Class resultClass) { this.checkOpen(); try { SQLQuery he = this.internalGetSession().createSQLQuery(sqlString); he.addEntity("alias1", resultClass.getName(), LockMode.READ); return new QueryImpl(he, this); } catch (RuntimeException var4) { throw this.convert(var4); } }
我看到这两个方法的时候发现,如果使用原生sql可以直接映射到Entity了,不用在这么麻烦的使用
List<Object[]>
来接收然后在痛苦的:
for (Object[] obj : retList) { Map<String, Object> map = new HashMap<String, Object>(); map.put("XXX", obj[0]); map.put("XXXX", obj[1]); map.put("XXXX", obj[2]); list.add(map);
返回需要的结果了.
问题
在使用Entity映射 新建了下面的Entity
public class User{ private String id; private String loginName; private String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
开始执行:
entityManager.createNativeQuery(sql,User.class);
控制台就会报出:
Caused by: org.hibernate.MappingException: Unknown entity: xxx.xxx.xxx.xxx.User at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:1096) at org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.getSQLLoadable(SQLQueryReturnProcessor.java:374) at org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.processRootReturn(SQLQueryReturnProcessor.java:427) at org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.processReturn(SQLQueryReturnProcessor.java:394) at org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.process(SQLQueryReturnProcessor.java:196) at org.hibernate.loader.custom.sql.SQLCustomQuery.<init>(SQLCustomQuery.java:88) at org.hibernate.engine.query.spi.NativeSQLQueryPlan.<init>(NativeSQLQueryPlan.java:69) at org.hibernate.engine.query.spi.QueryPlanCache.getNativeSQLQueryPlan(QueryPlanCache.java:249) at org.hibernate.internal.AbstractSessionImpl.getNativeSQLQueryPlan(AbstractSessionImpl.java:305) at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:311) at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:141) at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573) at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:449) ... 17 more
大致意思是在映射的时候找不到该entity.
解决办法
为什么呢? 不是已经有entity了啊,为什么还提示找不到.
于是我在Entity上加上了@Entity注解
@Entitypublic class User{ @Id private String id; private String loginName; private String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
这样在执行就OK了.
- 总结
- 原来hibernate映射的时候还是需要根据注解或者xml配置文件来映射的.如果找到注解或者xml文件就会报出上面的错误.
- 我误解了hibernate可以使用反射来自动映射entity和sql查询结果.
思考的问题
如果还需要加入注解或者xml文件的 使用原生sql查询和使用hql查询还有什么区别呢?
既然Entity和注解都写了 直接使用hql查询那不更方便么
谁可以帮忙解答一下这个问题?
0 0
- 记录使用hibernate时遇到的问题
- hibernate遇到的问题记录
- hibernate使用时遇到的小问题
- log4net使用时遇到的问题记录
- Hibernate开发中遇到的问题记录
- Hibernate中使用Oracle遇到的查询问题(记录帖)
- 记录一个使用Hibernate Validator验证信息参数化遇到的问题
- 在hibernate中遇到的问题的记录
- 学习使用solr时遇到的一些问题,记录
- 使用fuel部署openstack时遇到的问题记录一下
- 使用Junit进行单元测试时遇到的问题记录[上]
- 使用Junit进行单元测试时遇到的问题记录[下]
- 关于使用hibernate中遇到的问题
- [记录]使用sscanf_s遇到的问题
- 使用sigprocmask遇到的问题,记录下
- 记录mysql使用中遇到的问题
- 使用cocoapods遇到的一个问题,记录
- CEFGlue使用遇到的两个问题记录
- iOS
- META:网页上的元信息(meta-information)标签
- 车辆检测“Integrating Context and Occlusion for Car Detection by Hierarchical And-Or Model”
- debian上安装zabbix
- 学习笔记_android之复制黏贴实现方法
- 记录使用hibernate时遇到的问题
- 网页嵌套视频 swf
- ubuntu apache django 布署
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- 打印二叉树的某一层
- Java调用Oracle存储过程
- 看MapleSim符号如何一步解决并联机构逆运动学问题
- Apache ab 的简单实用
- Android Context 上下文 你必须知道的一切