`
jhyimu2005
  • 浏览: 181890 次
  • 性别: Icon_minigender_2
  • 来自: 苏州
社区版块
存档分类
最新评论

续AnnotationException: Cannot find the expected secondary table

阅读更多
此篇是相继一AnnotationException: Cannot find the expected secondary table 二产生的,通过以上的调试项目的部署已经没有任何问题,可当我进行测试的时候发现,在使用OneToMany注解且使用关联表来进行关联的时候,它是不支持双向的OneToMany的。此时总会抛出空指针错误,即:
java.lang.NullPointerException
	at org.hibernate.hql.ast.HqlSqlWalker.createFromJoinElement(HqlSqlWalker.java:332)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.joinElement(HqlSqlBaseWalker.java:3275)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3067)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2945)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
	at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:251)
	at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183)
	at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:134)
	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
	at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94)
	at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
	at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
	at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1650)

其解决方案就是将它作为ManyToMany来处理,因为OneToMany是它的特殊情况,在model中增加一函数
@Transient
	public Experiment getExperiment() {
		if(experiments != null && experiments.size() >0) {
			return experiments.iterator().next();
		}
		return null;

	}

来实现双向。
顺便把OneToMany的测试代码放在这吧,
@Test
	public void testSearchNotebook() {
		Notebook notebook = (Notebook) notebookDAO.find("select nb from Notebook nb left join fetch nb.experiment").get(0);
		//Experiment experiment = notebook.getExperiment();
		Experiment experiment= notebook.getExperiment();
		System.out.println(experiment);
	}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics