hibernate的hql因mysql的datetime类型与java的TimpStamp不对应引起的异常
来源:互联网 发布:3ds怎么网络联机 编辑:程序博客网 时间:2024/05/17 05:59
在使用hibernate的hql对数据库进行查询时,发生如下异常,异常指出没有找到合适的构造器,原因可能如下
1、构造器的参数个数与hql中的个数是否相同
2、构造器的参数类型和hql的类型是否对应
org.hibernate.hql.ast.QuerySyntaxException: Unable to locate appropriate constructor on class [com.anyview.codec.pojo.response.CatalogInfo] [select new com.anyview.codec.pojo.response.CatalogInfo(t.startTime) from com.anyview.entities.SchemeContentTable as t where t.scheme.vid=? and t.status=1]at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:82)at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:258)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)at com.anyview.dao.impl.PkCatalogDaoImpl.cata(PkCatalogDaoImpl.java:41)at com.anyview.dao.impl.PkCatalogDaoImpl.getCatalogs(PkCatalogDaoImpl.java:51)at com.anyview.service.impl.PkCatalogManagerImpl.getCatalogs(PkCatalogManagerImpl.java:25)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:601)at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)at com.sun.proxy.$Proxy17.getCatalogs(Unknown Source)at com.anyview.action.PkCatalogAction.pkCatalogResponse(PkCatalogAction.java:42)at com.anyview.server.handler.SubscribeServerHandler.channelRead(SubscribeServerHandler.java:86)at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelReadNow(ChannelHandlerInvokerUtil.java:84)at io.netty.channel.DefaultChannelHandlerInvoker.invokeChannelRead(DefaultChannelHandlerInvoker.java:153)at io.netty.channel.PausableChannelEventExecutor.invokeChannelRead(PausableChannelEventExecutor.java:86)at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:389)at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:243)at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelReadNow(ChannelHandlerInvokerUtil.java:84)at io.netty.channel.DefaultChannelHandlerInvoker.invokeChannelRead(DefaultChannelHandlerInvoker.java:153)at io.netty.channel.PausableChannelEventExecutor.invokeChannelRead(PausableChannelEventExecutor.java:86)at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:389)at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:956)at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:127)at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:514)at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:471)at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:385)at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:351)at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)at io.netty.util.internal.chmv8.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1412)at io.netty.util.internal.chmv8.ForkJoinTask.doExec(ForkJoinTask.java:280)at io.netty.util.internal.chmv8.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:877)at io.netty.util.internal.chmv8.ForkJoinPool.scan(ForkJoinPool.java:1706)at io.netty.util.internal.chmv8.ForkJoinPool.runWorker(ForkJoinPool.java:1661)at io.netty.util.internal.chmv8.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:126)
一、待查询数据表schemecontenttable如下
二、与数据表对应的实体类SchemeContentTable
@Entity@BatchSize(size=20)//hibernate的session大小@Table(name="SchemeContentTable",catalog="anyviewdb")public class SchemeContentTable implements java.io.Serializable{/** * */private static final long serialVersionUID = 1L;private Integer id;private String vpName;//新的题目名,VID+目录+题目名唯一private String vchapName;//虚拟目录名private Float score;//分值private Timestamp startTime;//允许开始时间private Timestamp finishTime;//要求完成时间private Timestamp updateTime;private SchemeTable scheme;//作业表private ProblemTable problem;//题目 级联private int status;//状态@Column(name="Status",length=11)public int getStatus() {return status;}public void setStatus(int status) {this.status = status;}@Id@Column(name="ID",unique = true, nullable = false)@GeneratedValue(strategy=GenerationType.IDENTITY)public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}@Column(name="VPName",length=255)public String getVpName() {return vpName;}public void setVpName(String vpName) {this.vpName = vpName;}@Column(name="VChapName",length=255)public String getVchapName() {return vchapName;}public void setVchapName(String vchapName) {this.vchapName = vchapName;}@Column(name="Score")public Float getScore() {return score;}public void setScore(Float score) {this.score = score;}@Column(name="StartTime")public Timestamp getStartTime() {return startTime;}public void setStartTime(Timestamp startTime) {this.startTime = startTime;}@Column(name="FinishTime")public Timestamp getFinishTime() {return finishTime;}public void setFinishTime(Timestamp finishTime) {this.finishTime = finishTime;}@Column(name="UpdateTime")public Timestamp getUpdateTime() {return updateTime;}public void setUpdateTime(Timestamp updateTime) {this.updateTime = updateTime;}@ManyToOne(targetEntity=SchemeTable.class)@JoinColumn(name="VID")public SchemeTable getScheme() {return scheme;}public void setScheme(SchemeTable scheme) {this.scheme = scheme;}@ManyToOne(targetEntity=ProblemTable.class)@JoinColumn(name="PID")public ProblemTable getProblem() {return problem;}public void setProblem(ProblemTable problem) {this.problem = problem;}}
三、封装查询信息的实体类类CatalogInfo
public class CatalogInfo implements Serializable {private static final long serialVersionUID = 1L;// 作业内容IDprivate Integer pid;// 虚拟目录private String chapName;// 题目名private String pName;// 分值private Float score;// 开始时间private Timestamp startTime;// 结束时间private Timestamp finishTime;// 更新时间private Timestamp updateTime;public Integer getPid() {return pid;}public void setPid(Integer pid) {this.pid = pid;}public String getChapName() {return chapName;}public void setChapName(String chapName) {this.chapName = chapName;}public String getpName() {return pName;}public void setpName(String pName) {this.pName = pName;}public Float getScore() {return score;}public void setScore(Float score) {this.score = score;}public Timestamp getStartTime() {return startTime;}public void setStartTime(Timestamp startTime) {this.startTime = startTime;}public Timestamp getFinishTime() {return finishTime;}public void setFinishTime(Timestamp finishTime) {this.finishTime = finishTime;}public Timestamp getUpdateTime() {return updateTime;}public void setUpdateTime(Timestamp updateTime) {this.updateTime = updateTime;}public CatalogInfo() {}public CatalogInfo(Integer pid, String chapName, String pName, Float score, Timestamp startTime,Timestamp finishTime, Timestamp updateTime) {this.pid = pid;this.chapName = chapName;this.pName = pName;this.score = score;this.startTime = startTime;this.finishTime = finishTime;this.updateTime = updateTime;}@Overridepublic String toString() {return "CatalogInfo [pid=" + pid + ", chapName=" + chapName + ", pName=" + pName + ", score=" + score+ ", startTime=" + startTime + ", finishTime=" + finishTime + ", updateTime=" + updateTime + "]";}}
四、主函数
public void main(String cid){String query2 = "select new com.anyview.codec.pojo.response.CatalogInfo(t.problem.pid,t.vchapName,t.vpName,t.score,t.startTime,t.finishTime,t.updateTime) from SchemeContentTable as t where t.scheme.vid=? and t.status=1";List<CatalogInfo> catalogInfoList = getSession().createQuery(query2).setInteger(0, 1).list();}
五、运行结果
运行失败,抛出异常
六、分析原因
仔细检查之后发现构造器参数个数没有问题,问题肯定是因为CatalogInfo的构造器参数类型和mysql数据库的类型不对应,经过尝试发现,将CatalogInfo的TimeStamp换成Date就可以了
七、修改代码
public class CatalogInfo implements Serializable {private static final long serialVersionUID = 1L;// 作业内容IDprivate Integer pid;// 虚拟目录private String chapName;// 题目名private String pName;// 分值private Float score;// 开始时间private Date startTime;// 结束时间private Date finishTime;// 更新时间private Date updateTime;public Integer getPid() {return pid;}public void setPid(Integer pid) {this.pid = pid;}public String getChapName() {return chapName;}public void setChapName(String chapName) {this.chapName = chapName;}public String getpName() {return pName;}public void setpName(String pName) {this.pName = pName;}public Float getScore() {return score;}public void setScore(Float score) {this.score = score;}public Date getStartTime() {return startTime;}public void setStartTime(Date startTime) {this.startTime = startTime;}public Date getFinishTime() {return finishTime;}public void setFinishTime(Date finishTime) {this.finishTime = finishTime;}public Date getUpdateTime() {return updateTime;}public void setUpdateTime(Date updateTime) {this.updateTime = updateTime;}public CatalogInfo() {}public CatalogInfo(Integer pid, String chapName, String pName, Float score, Date startTime, Date finishTime,Date updateTime) {this.pid = pid;this.chapName = chapName;this.pName = pName;this.score = score;this.startTime = startTime;this.finishTime = finishTime;this.updateTime = updateTime;}@Overridepublic String toString() {return "CatalogInfo [pid=" + pid + ", chapName=" + chapName + ", pName=" + pName + ", score=" + score+ ", startTime=" + startTime + ", finishTime=" + finishTime + ", updateTime=" + updateTime + "]";}}
结论:mysql数据库中的datime类型对应java中的Date类型
0 0
- hibernate的hql因mysql的datetime类型与java的TimpStamp不对应引起的异常
- Hibernate 因别名引起的Column Not Found(Mysql)
- 通过Java插入MYSQL的DATETIME类型
- Java读取 Mysql的 datetime类型
- 类型转换构造函数隐式调用与运算符重载参数类型的不对应
- MFC 解决因名字改变造成的函数名称不对应而调用失败的方法
- 在Hibernate里遇到Mysql的datetime类型怎么搞
- java的Date类型转换成MySQL的DateTime类型
- Java Date类型和mysql中 Datetime类型的转换
- 使用Hibernate轻松解决java中date与datetime类型不兼容的问题
- 使用Hibernate轻松解决java中date与datetime类型不兼容的问题
- sql server中datetime类型通过Hibernate与java的映射关系
- 使用Hibernate轻松解决java中date与datetime类型不兼容的问题
- 由于hibernate懒加载引起的异常
- 实验过程中遇到的mysql DateTime类型与java Calendar问题与解决过程记录
- mysql中timestamp,datetime,int类型的区别与优劣
- mysql中timestamp,datetime,int类型的区别与优劣
- mysql中timestamp,datetime类型的区别与优劣
- Android UI布局优化
- 7. Reverse Integer
- 应用于深度学习和自然语言处理的注意机制和记忆模型
- java synchronized详解
- 异常以及处理
- hibernate的hql因mysql的datetime类型与java的TimpStamp不对应引起的异常
- 先验概率,后验概率,似然概率,条件概率,贝叶斯,最大似然
- 黑屏 判断SF是否正常工作debug 方法
- 如何生成UTF-16汉字编码表
- web开发中问题与解决办法
- Python学习笔记之缩进
- leetcode:Isomorphic Strings
- markdown里如何显示HTML标签和转义字符?
- PL/SQL Developer创建Job的步骤