在hibernate createSQlquery结果中使用sql列名
我有几个我想要查询的复合主键的sql视图,而且由于Hibernate使用复合键很难,我使用的是createSQLQuery
。 问题是这个方法只能返回一个List,我需要通过索引来引用colums。
我有可能做一些像jdbc这样的事情并通过他们的sql名称而不是他们的索引来引用列吗?
Query query=session.createSQLQuery("your query"); query.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE); List
正如您可以从代码中找到的那样,该列表包含表示每行的Map对象。 每个Map对象都将列名作为键,值作为值。
注意:这适用于SQLQuery,如果您在hql查询上使用AliasToEntityMapResultTransformer而未指定别名,则会将索引值作为键。
如果您再次将aliasToValueMapList转换为POJO列表,我建议您创建自己的ResultTransformer并从’transformTuple’方法返回自定义对象。
上述评论中陈述的方法:
query.getReturnAliases()
实际上对我不起作用:
Caused by: java.lang.RuntimeException: SQL queries do not currently support returning aliases in query:
您的问题不明确 – 在第一段中,您希望通过索引引用列,而在第二段中,通过sql名称引用。 由于索引很容易,我会假设名字。
首先,您可以使用doWork
方法访问底层JDBC连接并像处理纯JDBC一样处理它:
session.doWork(new Work() { public void execute(Connection connection) throws SQLException { connection.prepareStatement(... } });
或者,您可以使用query.getReturnAliases
返回列名称的String[]
。 为了提高效率,我可能会建立一个别名Map
来索引,然后你可以做一些像result[map.get("column name")]
。
但实际上,Hibernate在使用xml映射时非常容易处理复合键(未尝试使用注释)。 这是前面的一点工作,复杂的关系存在一些问题(主要是当外键名称/跨度不匹配时),但是一旦你创建了id类并映射它,你就可以坚持使用HQL / Criteria并获得延迟加载,简单连接,脏检查等所有好处
我遇到了同样的问题,但是当我使用这个查询查询= session.createSQLQuery(“你的查询”)时它解决了; query.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
我得到带有标题名称的结果但是当我在sql查询中创建一个新列时我遇到了一个新问题从Employee.class选择’DCA5E3’作为Shipmentcolor但是在这种情况下我得到了SHIPMENTCOLOR:“D”。 如何获得SHIPMENTCOLOR的全部价值。
- 已分离的实体传递给持久性错误
- JTASessionContext与JDBCTransactionFactory一起使用; 使用getCurrentSession()自动刷新将无法正常运行
- Hibernate遵循哪种模式?
- JBoss和不同版本的Hibernate
- 如何在struts2中使用@Valid注释触发validation?
- Hibernate和mysql的连接太多了
- Spring JPA(Hibernate)没有类型的限定bean:javax.persistence.EntityManagerFactory
- “使用名称创建bean时出错”创建事务管理器时
- Hibernate和Apache Felix的依赖链冲突