latha1119 wrote:
Here is how it worked for SQL Server 2005
Class RegisterFunction
Code:
public class RegisterFunction extends SQLServerDialect{
public RegisterFunction() {
super();
registerColumnType(Types.DATE, "DATE");
registerColumnType(Types.TIME, "TIME");
registerColumnType(Types.TIMESTAMP, "TIMESTAMP");
//registerFunction("DATEADD", new StandardSQLFunction("DATEADD",Hibernate.TIMESTAMP));
registerFunction( "dateadd", new VarArgsSQLFunction( Hibernate.TIMESTAMP, "dateadd(", ",", ")" ) );
}
Modify the hibernate.properties to use this Class.
In the Unit test
Two things to notice:-
1) I could not use current_date() function instead its getdate() function.
2) Hibernate would only query it on a valid Hibernate mapped entity.
Code:
public void tesSQLFun()throws Exception{
Session session=somehow get session;
//Query q1=session.createQuery("select DATEADD(Month, -3, '3-1-2008')from User");
Query q1=session.createQuery("select DATEADD(Month, -3, GETDATE()) from User");
List records =q1.list();
if(records !=null){
System.out.println("records "+records.get(0));
}
}
Unit test output
Hibernate: select dateadd(Month,-3,'3-1-2008') as col_0_0_ from USR usr0_
records 2007-12-01 00:00:00.0
Hibernate: select dateadd(Month,-3,getdate()) as col_0_0_ from USR usr0_
records 2008-12-10 15:08:08.15
---------------------------------------------------------
Hello,
Thank you for you support and all.
I have one query regarding your solution. My question is how to map the RegisterFunction class to my CRUD class.
I have extend the RegisterFunction class and implemented my functionality. But i got again error.
I created the class, extend the RegisterFunction Class and implemented the below stuff ..
public class SubContractHome extends RegisterFunction {
Query q1=session.createQuery("select DATEADD(Month, -3, GETDATE()) from SubContract");
List records =q1.list();
if(records !=null){
System.out.println("records "+records.get(0));
}
------ }
----------------------------------
Error:
EBUG org.hibernate.hql.ast.QueryTranslatorImpl [http-8080-1] [BUS] 12 Mar 2009 19:06:56,530 :parse() - HQL: select DATEADD(Month, -3, GETDATE()) from com.data.SubContract
DEBUG org.hibernate.hql.ast.AST [http-8080-1] [BUS] 12 Mar 2009 19:06:56,561 :--- HQL AST ---
\-[QUERY] 'query'
\-[SELECT_FROM] 'SELECT_FROM'
+-[FROM] 'from'
| \-[RANGE] 'RANGE'
| \-[DOT] '.'
| +-[DOT] '.'
| | +-[DOT] '.'
| | | +-[DOT] '.'
| | | | +-[IDENT] 'com'
| | \-[IDENT] 'data'
| \-[IDENT] 'SubContract'
\-[SELECT] 'select'
\-[METHOD_CALL] '('
+-[IDENT] 'DATEADD'
\-[EXPR_LIST] 'exprList'
+-[IDENT] 'Month'
+-[UNARY_MINUS] '-'
| \-[NUM_INT] '3'
\-[METHOD_CALL] '('
+-[IDENT] 'GETDATE'
\-[EXPR_LIST] 'exprList'
DEBUG org.hibernate.hql.ast.ErrorCounter [http-8080-1] [BUS] 12 Mar 2009 19:06:56,561 :throwQueryException() : no errors
DEBUG org.hibernate.hql.antlr.HqlSqlBaseWalker [http-8080-1] [BUS] 12 Mar 2009 19:06:56,561 :select << begin [level=1, statement=select]
DEBUG org.hibernate.hql.ast.tree.FromElement [http-8080-1] [BUS] 12 Mar 2009 19:06:56,561 :FromClause{level=1} : com.data.SubContract (no alias) -> subcontrac0_
DEBUG org.hibernate.hql.antlr.HqlSqlBaseWalker [http-8080-1] [BUS] 12 Mar 2009 19:06:56,593 :select : finishing up [level=1, statement=select]
DEBUG org.hibernate.hql.ast.HqlSqlWalker [http-8080-1] [BUS] 12 Mar 2009 19:06:56,593 :processQuery() : ( SELECT ( {select clause} ( ( DATEADD ( exprList Month ( - 3 ) ( ( GETDATE exprList ) ) ) ) ( FromClause{level=1} dbo.SubContract subcontrac0_ ) )
ERROR com.web.util.ExceptionFilter [http-8080-1] [BUS] 12 Mar 2009 19:07:01,968 :Unexpected error
org.apache.jasper.JasperException: javax.el.ELException: Error reading 'allToBeRenewed' on type com.web.common.SubcontractCRUD
at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.web.util.ExceptionFilter.doFilter(ExceptionFilter.java:38)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.el.ELException: Error reading 'allToBeRenewed' on type com.web.common.SubcontractCRUD
at javax.el.BeanELResolver.getValue(BeanELResolver.java:66)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
at org.apache.el.parser.AstValue.getValue(AstValue.java:114)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:923)
at org.apache.jsp.SubcontractsToBeRenewed_jsp._jspx_meth_c_005fset_005f0(SubcontractsToBeRenewed_jsp.java:829)
at org.apache.jsp.SubcontractsToBeRenewed_jsp._jspService(SubcontractsToBeRenewed_jsp.java:670)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
... 19 more
Caused by: java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.MethodNode
\-[METHOD_CALL] MethodNode: '('
+-[METHOD_NAME] IdentNode: 'DATEADD' {originalText=DATEADD}
\-[EXPR_LIST] SqlNode: 'exprList'
+-[IDENT] IdentNode: 'Month' {originalText=Month}
+-[UNARY_MINUS] UnaryArithmeticNode: '-'
| \-[NUM_INT] LiteralNode: '3'
\-[METHOD_CALL] MethodNode: '('
+-[METHOD_NAME] IdentNode: 'GETDATE' {originalText=GETDATE}
\-[EXPR_LIST] SqlNode: 'exprList'
at org.hibernate.hql.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:145)
at org.hibernate.hql.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:705)
---------------------------------------------
Could u Please respond on this.