詢問一個hibernateTemplate的簡單問題


我的HQL語句是這樣的

select username2,realname from Friends f,Users u where f.username1=? and f.username2=u.username order by u.username asc", username1

但我這樣用是錯誤的:(本身的語句沒有問題,我轉為sql語句,在sql server中運行正確)

List<String[]> list = null;
list = hibernateTemplate.find("select username2,realname from Friends f,Users u where f.username1=? and f.username2=u.username order by u.username asc", username1);

問題應該就在於hibernateTemplate.find的返回值類型了。

應該是什么呢?怎么寫?


Struts Problem Report

Struts has detected an unhandled exception:

Messages:
No data type for node: org.hibernate.hql.ast.tree.IdentNode +-[IDENT] IdentNode: 'username2' {originalText=username2}
File: org/hibernate/hql/ast/tree/SelectClause.java
Line number: 156
Stacktraces

java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.IdentNode +-[IDENT] IdentNode: 'username2' {originalText=username2}
    org.hibernate.hql.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:156)
    org.hibernate.hql.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:852)
    org.hibernate.hql.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:640)
    org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:685)
    org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301)
    org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:244)
    org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254)
    org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185)
    org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
    org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:101)
    org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:80)
    org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:124)
    org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
    org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
    org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1770)
    org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:914)
    org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:1)
    org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
    org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
    org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:912)
    org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:908)


……………………略

10 个解决方案

#1


hibernateTemplate.find不是這么用的。hql里不應該使用表名和列名,應該是用你的類名和字段名。

#2


引用 1 樓 fw347969680 的回復:
hibernateTemplate.find不是這么用的。hql里不應該使用表名和列名,應該是用你的類名和字段名。

搞錯了 。Friends和Users這兩個類的屬性有哪些?

#3


引用 1 樓 fw347969680 的回復:
hibernateTemplate.find不是這么用的。hql里不應該使用表名和列名,應該是用你的類名和字段名。



這就是我的 映射類的類名和字段名

Friends 里的就有username1  username2兩個變量

Users里就有username  realname 倆變量

#4


肯定是find返回類型不對的問題。我試過其他find語句,返回對象都沒有問題

#5


引用 4 樓 danbomingli_88 的回復:
肯定是find返回類型不對的問題。我試過其他find語句,返回對象都沒有問題

你要查詢出的數據要分別顯示兩個表中的信息的話,這個很麻煩,新建一個實體類,實體類的屬性包含要顯示數據的字段,然后只能按照原始的數據庫連接讀取數據,一個個的賦值,添加到List中。參考,http://maskainv.iteye.com/blog/505822

#6


引用 5 樓 fw347969680 的回復:
Quote: 引用 4 樓 danbomingli_88 的回復:

肯定是find返回類型不對的問題。我試過其他find語句,返回對象都沒有問題

你要查詢出的數據要分別顯示兩個表中的信息的話,這個很麻煩,新建一個實體類,實體類的屬性包含要顯示數據的字段,然后只能按照原始的數據庫連接讀取數據,一個個的賦值,添加到List中。參考,http://maskainv.iteye.com/blog/505822



這個我懂。但這個要求確實特殊,必須這么做。

#7


解決了 select后面應該是f.username2 u .realname

#8


雖然5樓沒幫上忙,但還是給分吧。結貼

#9


引用 8 樓 danbomingli_88 的回復:
雖然5樓沒幫上忙,但還是給分吧。結貼

謝謝,你select語句改好后就可以了嗎?返回的List是怎么樣的?

#10


引用 9 樓 fw347969680 的回復:
Quote: 引用 8 樓 danbomingli_88 的回復:

雖然5樓沒幫上忙,但還是給分吧。結貼

謝謝,你select語句改好后就可以了嗎?返回的List是怎么樣的?


返回的就是List<object>然后轉型為string就行了

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com