Java 无法在Hibernate条件中提取结果集

Java 无法在Hibernate条件中提取结果集,java,oracle,hibernate,resultset,Java,Oracle,Hibernate,Resultset,我在输入适当的结果条件后遇到异常。uniqueResult()对象引用。目的查询-从DB Oracle的表“quotes”中获取随机结果 org.hibernate.exception.sqlgrammareexception:无法提取结果集 位于org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:80) 位于org.hibernate.exception.

我在输入适当的结果条件后遇到异常。uniqueResult()对象引用。目的查询-从DB Oracle的表“quotes”中获取随机结果

org.hibernate.exception.sqlgrammareexception:无法提取结果集 位于org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:80) 位于org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) 位于org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126) 位于org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112) 位于org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:91) 位于org.hibernate.loader.loader.getResultSet(loader.java:2065) 位于org.hibernate.loader.loader.executeQueryStatement(loader.java:1862) 位于org.hibernate.loader.loader.executeQueryStatement(loader.java:1838) 位于org.hibernate.loader.loader.doQuery(loader.java:909) 在org.hibernate.loader.loader.doQueryAndInitializeNonLazyCollections(loader.java:354)上 位于org.hibernate.loader.loader.doList(loader.java:2553) 位于org.hibernate.loader.loader.doList(loader.java:2539) 位于org.hibernate.loader.loader.listIgnoreQueryCache(loader.java:2369) 位于org.hibernate.loader.loader.list(loader.java:2364) 位于org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:126) 位于org.hibernate.internal.SessionImpl.list(SessionImpl.java:1682) 位于org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:380) 位于org.hibernate.internal.CriteriaImpl.uniqueResult(CriteriaImpl.java:402) 位于ua.com.goit.gojava7.kikstarter.dao.database.QuoteDaoDbImpl.getRandomQuote(QuoteDaoDbImpl.java:42) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:601) 位于org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302) 位于org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) 在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:157)上 位于org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) 位于org.springframework.transaction.interceptor.TransactionSpectSupport.invokeWithinTransaction(TransactionSpectSupport.java:281) 位于org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:179)上 位于org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 位于com.sun.proxy.$Proxy48.getRandomQuote(未知源) 在ua.com.goit.gojava7.kikstarter.controller.servlet.SelectoinCategories.doGet(SelectoinCategories.java:43) 位于javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 位于javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 位于org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 位于org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 位于org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) 位于org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 位于org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 运行(Thread.java:722)

class quotedadobimpl

@Repository
public class QuoteDaoDbImpl implements QuoteDao {

    private static final String SELECT_RANDOM_QUOTE = "SELECT * FROM (SELECT * FROM quotes ORDER BY DBMS_RANDOM.VALUE) WHERE rownum = 1";

    @Autowired
    private SessionFactory sessionFactory;

    @Transactional
    @Override
    public Quote getRandomQuote() {
        Session session = sessionFactory.getCurrentSession();

        Criteria criteria = session.createCriteria(Quote.class);
        criteria.add(Restrictions.sqlRestriction(SELECT_RANDOM_QUOTE));
        criteria.setMaxResults(1);

        Quote quote = (Quote) criteria.uniqueResult();
        session.close();

        return quote;
    }
}
类别选择类别

@WebServlet("/categories")
public class SelectoinCategories extends HttpServlet {

   /**
    * 
    */
    private static final long serialVersionUID = 1L;

    @Autowired
    private QuoteDao quoteDao;

    @Autowired
    private CategoryDao categoryDao;

    public void init() throws ServletException {

        SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, getServletContext());

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

        Quote quote = quoteDao.getRandomQuote();
        List<Category> categories = categoryDao.getAll();

        request.setAttribute("content", quote.getContent());
        request.setAttribute("author", quote.getAuthor());
        request.setAttribute("categories", categories);
        request.getRequestDispatcher("WEB-INF/jsp/categories.jsp").forward(request, response);

    }
}
CREATE TABLE quotes
(
id INTEGER NOT NULL,
content VARCHAR2(500) NOT NULL,
author VARCHAR2(100) NOT NULL
);
表引号

@WebServlet("/categories")
public class SelectoinCategories extends HttpServlet {

   /**
    * 
    */
    private static final long serialVersionUID = 1L;

    @Autowired
    private QuoteDao quoteDao;

    @Autowired
    private CategoryDao categoryDao;

    public void init() throws ServletException {

        SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, getServletContext());

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

        Quote quote = quoteDao.getRandomQuote();
        List<Category> categories = categoryDao.getAll();

        request.setAttribute("content", quote.getContent());
        request.setAttribute("author", quote.getAuthor());
        request.setAttribute("categories", categories);
        request.getRequestDispatcher("WEB-INF/jsp/categories.jsp").forward(request, response);

    }
}
CREATE TABLE quotes
(
id INTEGER NOT NULL,
content VARCHAR2(500) NOT NULL,
author VARCHAR2(100) NOT NULL
);
修改尝试

 private static final String SELECT_RANDOM_QUOTE = 
    "SELECT id, content, author FROM 
    (SELECT * FROM quotes ORDER BY DBMS_RANDOM.VALUE) as quotes  WHERE rownum = 1";
修改尝试

 private static final String SELECT_RANDOM_QUOTE = 
    "SELECT id, content, author FROM 
    (SELECT * FROM quotes ORDER BY DBMS_RANDOM.VALUE) as quotes  WHERE rownum = 1";

其SQL语法异常-在查询浏览器中运行SQL查询,确保其工作。@Subhrajyoti Majumder在SQL Plus查询中返回Property结果,我已检查。其SQL语法异常可能重复-在查询浏览器中运行SQL查询,确保其工作。@Subhrajyoti Majumder在SQL Plus查询中返回Property结果,我检查过了。可能是@sunysen的重复。我在SQL Plus中尝试了您的版本查询。我在路径查询
时出错,因为qoutes
。没有
作为qoutes
查询工作在SQL Plus中是正确的。我还检查了我的versoin查询-这是工作,我得到了随机qoute。你还有什么想法吗?谢谢。@sunysen我在SQL Plus中尝试了您的版本查询。我在路径查询
时出错,因为qoutes
。没有
作为qoutes
查询工作在SQL Plus中是正确的。我还检查了我的versoin查询-这是工作,我得到了随机qoute。你还有什么想法吗?非常感谢。