java项目——错误记录手册

数据库相关错误——针对ODL工程

一、Mybatis框架下

1、easyCode自动生成代码对主键判断异常

org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'hctel/third/persistence/dao/AlertInfosDao.xml'. Cause: org.apache.ibatis.builder.BuilderException: Parsing error was found in mapping #{}.  C
heck syntax #{property|(expression), var1=value1, var2=value2, ...}
        at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:120)
        at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:92)
        at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.loadXmlResource(MapperAnnotationBuilder.java:173)
        at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parse(MapperAnnotationBuilder.java:124)
        at org.apache.ibatis.binding.MapperRegistry.addMapper(MapperRegistry.java:72)
        at org.apache.ibatis.session.Configuration.addMapper(Configuration.java:741)
        at hctel.third.persistence.utils.MybatisUtils.getFactory(MybatisUtils.java:35)
        at hctel.third.persistence.utils.MybatisUtils.createSqlSession(MybatisUtils.java:53)
        at hctel.third.transfer.AccTransferContainer.persistenceMe(AccTransferContainer.java:98)
        at hctel.common.TopologyDataTreeChangeListener.onDataTreeChanged(TopologyDataTreeChangeListener.java:151)
        at org.opendaylight.controller.md.sal.binding.impl.BindingDOMDataTreeChangeListenerAdapter.onDataTreeChanged(BindingDOMDataTreeChangeListenerAdapter.java:41)
        at org.opendaylight.controller.cluster.datastore.DataTreeChangeListenerActor.dataChanged(DataTreeChangeListenerActor.java:59)
        at org.opendaylight.controller.cluster.datastore.DataTreeChangeListenerActor.handleReceive(DataTreeChangeListenerActor.java:38)
        at org.opendaylight.controller.cluster.common.actor.AbstractUntypedActor.onReceive(AbstractUntypedActor.java:38)
        at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:165)
        at akka.actor.Actor$class.aroundReceive(Actor.scala:502)
        at akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:95)
        at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526)
        at akka.actor.ActorCell.invoke(ActorCell.scala:495)
        at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257)
        at akka.dispatch.Mailbox.run(Mailbox.scala:224)
        at akka.dispatch.Mailbox.exec(Mailbox.scala:234)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: org.apache.ibatis.builder.BuilderException: Parsing error was found in mapping #{}.  Check syntax #{property|(expression), var1=value1, var2=value2, ...}
        at org.apache.ibatis.builder.SqlSourceBuilder$ParameterMappingTokenHandler.parseParameterMapping(SqlSourceBuilder.java:132)
        at org.apache.ibatis.builder.SqlSourceBuilder$ParameterMappingTokenHandler.buildParameterMapping(SqlSourceBuilder.java:72)
        at org.apache.ibatis.builder.SqlSourceBuilder$ParameterMappingTokenHandler.handleToken(SqlSourceBuilder.java:67)
        at org.apache.ibatis.parsing.GenericTokenParser.parse(GenericTokenParser.java:78)
        at org.apache.ibatis.builder.SqlSourceBuilder.parse(SqlSourceBuilder.java:45)
        at org.apache.ibatis.scripting.defaults.RawSqlSource.<init>(RawSqlSource.java:46)
        at org.apache.ibatis.scripting.defaults.RawSqlSource.<init>(RawSqlSource.java:40)
        at org.apache.ibatis.scripting.xmltags.XMLScriptBuilder.parseScriptNode(XMLScriptBuilder.java:72)
        at org.apache.ibatis.scripting.xmltags.XMLLanguageDriver.createSqlSource(XMLLanguageDriver.java:44)
        at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:94)
        at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:135)
        at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:128)
        at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:118)
        ... 25 more
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 0
        at java.lang.String.charAt(String.java:658)
        at org.apache.ibatis.builder.ParameterExpression.parse(ParameterExpression.java:44)
        at org.apache.ibatis.builder.ParameterExpression.<init>(ParameterExpression.java:39)
        at org.apache.ibatis.builder.SqlSourceBuilder$ParameterMappingTokenHandler.parseParameterMapping(SqlSourceBuilder.java:128)
        ... 37 more

发现错误: . Cause: org.apache.ibatis.builder.BuilderException: Parsing error was found in mapping #{}. Check syntax #{property|(expression), var1=value1, var2=value2, …}

java.lang.StringIndexOutOfBoundsException: String index out of range: 0
查找错误:

    <select id="queryById" resultMap="AlertInfosMap">
        select
          elmt_no, alarm_from, alarm_type, elmt_alarm_id, alarm_level, alarm_time_start, alarm_time_end, ip_addr, slot_no, port_no, alarm_des, confirm_time, confirm_user, confirm_tag, process_flag, alarm_name_id
        from hc_manager.alert_infos
        where  = #{ }
    </select>

明显找到错误where = #{ },改为 where elmt_no = #{elmtNo}
注意
在dao层接口的文件中也需注意添加参数
eg: AlertInfos queryById(); 改为 AlertInfos queryById(Integer elmtNo);

2、SQL语句执行异常,字段“group_id”没有默认值

Caused by: java.sql.SQLException: Field ‘group_id’ doesn’t have a default value

原因:由于主键group_id未设置自增

3、绑定无效异常

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): mybatis.impl.dao.UserGroupDao.insert
原因:Dao层接口的文件和Mapper.xml映射文件未放在同一位置,出现绑定失败

4、别名错误

Caused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias ‘mybatis.impl.entity.AlarmConf’. Cause: java.lang.ClassNotFoundException: Canno
t find class: mybatis.impl.entity.AlarmConf
原因:未给实体全类名起别名
解决方法:起个别名并使用

	//先起别名
	configuration.getTypeAliasRegistry().registerAlias("alarmConf", mybatis.impl.entity.AlarmConf.class);
	//映射Mapper.xml文件中使用
	<resultMap type="alarmConf" id="AlarmConfMap">

二、Hibernate框架

1、数据库配置问题

java.lang.reflect.UndeclaredThrowableException
        at com.sun.proxy.$Proxy143.createQuery(Unknown Source)
        at hctel.hibernate.service.MeInfosImpl.getAll(MeInfosImpl.java:142)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.aries.proxy.impl.ProxyHandler$1.invoke(ProxyHandler.java:54)
        at org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:119)
        at hctel.hibernate.service.$MeInfosImpl1928639384.getAll(Unknown Source)
        at hctel.hibernate.HibernateJpaServiceImpl.init(HibernateJpaServiceImpl.java:28)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:724)
        at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:411)
        at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:276)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at org.apache.aries.blueprint.container.ExecutorServiceWrapper.run(ExecutorServiceWrapper.java:106)
        at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.aries.jpa.container.impl.EntityManagerProxyFactory$EMHandler.invoke(EntityManagerProxyFactory.java:31)
        ... 46 more
Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: me_infos is not mapped [from me_infos]
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1750)
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683)
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:331)
        ... 51 more
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: me_infos is not mapped [from me_infos]
        at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:96)
        at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:120)
        at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:234)
        at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
        at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:126)
        at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88)
        at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167)
        at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
        at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
        at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1800)
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:328)
        ... 51 more

原因:

 meInfos = (MeInfos) em.createQuery( "from me_infos me where me.elmtNo=" + id ).getSingleResult();

HQL语句查询的是对象,而不是表名,此处由于失误,而写成了表名。
解决:把表名改回实体名

meInfos = (MeInfos) em.createQuery( "from MeInfos me where me.elmtNo=" + id ).getSingleResult();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值