此篇是相继一AnnotationException: Cannot find the expected secondary table 二产生的,通过以上的调试项目的部署已经没有任何问题,可当我进行测试的时候发现,在使用OneToMany注解且使用关联表来进行关联的时候,它是不支持双向的OneToMany的。此时总会抛出空指针错误,即:
其解决方案就是将它作为ManyToMany来处理,因为OneToMany是它的特殊情况,在model中增加一函数
来实现双向。
顺便把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);
}