select wp from TbWhPlanbill wp left join wp.tbCustSet as c on wp.custId = c.custId
解决方案 »
- 各位高手帮小弟看下哪里错,用hibernary+spring自动生成数据库的表,启动服务没报错,但是数据库没生成任何表
- 关于instanceof的问题
- 请问把socket服务程序,放在tomcat里运行,好不好呢?
- hibernate连接数据库问题
- db2创建函数问题
- 请关注:一个有关java用户开发界面中超链接的问题
- JPanel的问题
- Tomcat5与Tomcat4的区别
- 100分挑战和造福:假如你是SUN,现在开发petstore,从设计到运行,你会采取什么样的步骤?
- maven多项目war包管理
- struts中的reset标签无效~
- 一个hibernate中令我疑惑的持久化对象的传递问题。
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(TbWhplanbill.class);
detachedCriteria.setFetchMode("custId",FetchMode.JOIN);然后findByCriteria(detachedCriteria)
select wp from TbWhPlanbill wp left join wp.tbCustSet as c
应该翻译为:
select wp.* from TbWhPlanbill wp left outer join tbCustSet as c on wp.planbillId=c.pbId
才对。感觉这2个类之间的关系和你的映射配置有点莫名其妙。把2个类的hbm文件及数据关系都贴出来看看。
hsql是不支持这样的
你想看看报错吗:
直接用eclipse+hibernate tools
错误:
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: on near line 1, column 106 [select wp from com.ist.zhifawuliu.storagemanager.basedata.vo.TbWhPlanbill wp left join wp.tbCustSet as c on wp.custId=c.custId]
at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:240)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:151)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:101)
at org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:470)
at org.hibernate.eclipse.console.views.DynamicQueryTranslatorView$2.execute(DynamicQueryTranslatorView.java:141)
at org.hibernate.console.execution.DefaultExecutionContext.execute(DefaultExecutionContext.java:35)
at org.hibernate.eclipse.console.views.DynamicQueryTranslatorView.generateSQL(DynamicQueryTranslatorView.java:136)
at org.hibernate.eclipse.console.views.DynamicQueryTranslatorView.updateText(DynamicQueryTranslatorView.java:117)
at org.hibernate.eclipse.console.views.DynamicQueryTranslatorView.access$3(DynamicQueryTranslatorView.java:111)
at org.hibernate.eclipse.console.views.DynamicQueryTranslatorView$4.run(DynamicQueryTranslatorView.java:193)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:123)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3102)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2761)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1699)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1663)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:367)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:143)
at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:103)
at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:226)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:376)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:163)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:334)
at org.eclipse.core.launcher.Main.basicRun(Main.java:278)
at org.eclipse.core.launcher.Main.run(Main.java:973)
at org.eclipse.core.launcher.Main.main(Main.java:948)
Caused by: line 1:106: unexpected token: on
at org.hibernate.hql.antlr.HqlBaseParser.fromJoin(HqlBaseParser.java:1765)
at org.hibernate.hql.antlr.HqlBaseParser.fromClause(HqlBaseParser.java:1420)
at org.hibernate.hql.antlr.HqlBaseParser.selectFrom(HqlBaseParser.java:1130)
at org.hibernate.hql.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:702)
at org.hibernate.hql.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:296)
at org.hibernate.hql.antlr.HqlBaseParser.statement(HqlBaseParser.java:159)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:234)
... 29 more
to 傲龙:
谢谢了,我试试。
是用于属性为关联实体类的抓取,不要误导人啊。
tbwhplanbi0_.cust_id=tbcustset1_.id
从TbWhplanbill.hdm.xml来看TbWhPlanbill是不是和TbCust是one-to-many的关系,从"也就是用TbWhPlanbill的其中一个列cust_id来对应TbCust的主键cust_id"来看,TbWhPlanbill和TbCust是many-to-one的关系,这2个类是不是many-to-many???
计划表中可能有记录有客户,也可能没有。一句话:TbWhPlanbill中的custId不一定有值,如果有值,则可以关联TbCust进行查询。当然,这个查询可以用子查询来进行查询,但是我是在试外连接的时候发现这个问题,想具体了解一下如果用外连接进行查询的话,那么应该怎么配置和处理。
------------
那就是one-to-many关联了。public class TbWhplanbill {
private Long planbillId;
private Cust cust; //getter/setter method
}TbWhplanbill.hbm.xml
<id name="planbillId" column="planbill_id" type="java.lang.Long">
<generator class="increment"/>
</id>
<many-to-one name="cust" column="cust_id" type="com.TbCust" />hql:
select p from TbWhplanbill p left join fetch p.cust
select wp from TbWhPlanbill wp left join TbCust as c on wp.…… = c.……
<key column="cust_id">
<one-to-many class="com.TbCust"/>
</set>怎么不试试看?是因为我的级别低不值得一试吗?
楼上的,好有自信....查查dtd吧,根本不能这样写的,one-to-many在one这端也能用于<key column="..." property-ref="...">。而且property-fef应为property-ref.
<key column="cust_id" property-ref="cust-id">
<one-to-many class="com.TbCust"/>
</set>