记录使用hibernate时遇到的问题
2015-11-18 16:40
253 查看
记录hibernate中的一些问题
使用entityManagercreateNativeQuery
问题
解决办法
思考的问题
第一个直接传入原生sql语句:
第二个传入原生sql和需要映射的实体类:
我看到这两个方法的时候发现,如果使用原生sql可以直接映射到Entity了,不用在这么麻烦的使用
来接收然后在痛苦的:
返回需要的结果了.
开始执行:
控制台就会报出:
大致意思是在映射的时候找不到该entity.
于是我在Entity上加上了@Entity注解
这样在执行就OK了.
总结
原来hibernate映射的时候还是需要根据注解或者xml配置文件来映射的.如果找到注解或者xml文件就会报出上面的错误.
我误解了hibernate可以使用反射来自动映射entity和sql查询结果.
既然Entity和注解都写了 直接使用hql查询那不更方便么
谁可以帮忙解答一下这个问题?
使用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映射 新建了下面的Entitypublic 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.ja 4000 va: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注解
@Entity public 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查询那不更方便么
谁可以帮忙解答一下这个问题?
相关文章推荐
- Hibernate Oracle sequence的使用技巧
- jsp Hibernate批量更新和批量删除处理代码
- jsp hibernate的分页代码第1/3页
- JAVA+Hibernate 无限级分类
- SSH整合中 hibernate托管给Spring得到SessionFactory
- jsp hibernate 数据保存操作的原理
- hibernate中的增删改查实现代码
- 解决hibernate+mysql写入数据库乱码
- java优化hibernate性能的几点建议
- java Hibernate延迟加载
- hibernate 常用方法介绍
- JQuery+Ajax+Struts2+Hibernate框架整合实现完整的登录注册
- 深入理解Hibernate中的flush机制
- 简单的手工hibernate程序示例
- 解析使用jdbc,hibernate处理clob/blob字段的详解
- 浅析java程序中hibernate的应用总结
- java面试常见问题之Hibernate总结
- 关于Hibernate的一些学习心得总结
- Hibernate管理Session和批量操作分析
- 基于spring+hibernate+JQuery开发之电子相册(附源码下载)