GVKun编程网logo

HibernateException:无法获取当前线程的事务同步会话(无法获取事件数据)

16

本文将带您了解关于HibernateException:无法获取当前线程的事务同步会话的新内容,同时我们还将为您解释无法获取事件数据的相关知识,另外,我们还将为您提供关于@OrderBy导致org.h

本文将带您了解关于HibernateException:无法获取当前线程的事务同步会话的新内容,同时我们还将为您解释无法获取事件数据的相关知识,另外,我们还将为您提供关于@OrderBy导致org.hibernate.HibernateException:无法解析按片段、c# – NHibernate – NHibernate.Exceptions.GenericADOException:无法执行查询、c# – NHibernate.Exceptions.GenericADOException:无法执行查询、Hibernate org.hibernate.LazyInitializationException:无法延迟初始化角色集合:的实用信息。

本文目录一览:

HibernateException:无法获取当前线程的事务同步会话(无法获取事件数据)

HibernateException:无法获取当前线程的事务同步会话(无法获取事件数据)

尝试使用带@Service注释的类时出现以下异常:

org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread    at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:134) ~[spring-orm-4.1.1.RELEASE.jar:4.1.1.RELEASE]    at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1014) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]    at webapp.base.repository.GenericDaoImpl.saveOrUpdate(GenericDaoImpl.java:59) ~[base-0.0.1-SNAPSHOT-classes.jar:na]    at com.example.repository.PageViewDaoImpl.saveOrUpdate(PageViewDaoImpl.java:19) ~[site-0.0.1-SNAPSHOT.jar:na]    at com.example.repository.PageViewDaoImpl.saveOrUpdate(PageViewDaoImpl.java:14) ~[site-0.0.1-SNAPSHOT.jar:na]    at com.example.service.PageViewServiceImpl.savePageView(PageViewServiceImpl.java:26) ~[site-0.0.1-SNAPSHOT.jar:na]    at com.example.interceptor.PageViewInterceptor.preHandle(PageViewInterceptor.java:29) ~[site-0.0.1-SNAPSHOT.jar:na]    at org.springframework.web.servlet.HandlerExecutionChain.applyPreHandle(HandlerExecutionChain.java:130) ~[spring-webmvc-4.1.1.RELEASE.jar:4.1.1.RELEASE]    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938) ~[spring-webmvc-4.1.1.RELEASE.jar:4.1.1.RELEASE]    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) ~[spring-webmvc-4.1.1.RELEASE.jar:4.1.1.RELEASE]    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) [spring-webmvc-4.1.1.RELEASE.jar:4.1.1.RELEASE]    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) [spring-webmvc-4.1.1.RELEASE.jar:4.1.1.RELEASE]    at javax.servlet.http.HttpServlet.service(HttpServlet.java:620) [servlet-api-3.0.jar:na]    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) [spring-webmvc-4.1.1.RELEASE.jar:4.1.1.RELEASE]    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) [servlet-api-3.0.jar:na]    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) [tomcat-catalina-7.0.52.jar:7.0.52]    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [tomcat-catalina-7.0.52.jar:7.0.52]    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748) [tomcat-catalina-7.0.52.jar:7.0.52]    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:488) [tomcat-catalina-7.0.52.jar:7.0.52]    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411) [tomcat-catalina-7.0.52.jar:7.0.52]    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338) [tomcat-catalina-7.0.52.jar:7.0.52]    at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:466) [tomcat-catalina-7.0.52.jar:7.0.52]    at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:337) [tomcat-catalina-7.0.52.jar:7.0.52]    at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:427) [tomcat-catalina-7.0.52.jar:7.0.52]    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:200) [tomcat-catalina-7.0.52.jar:7.0.52]    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) [tomcat-catalina-7.0.52.jar:7.0.52]    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) [tomcat-catalina-7.0.52.jar:7.0.52]    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) [tomcat-catalina-7.0.52.jar:7.0.52]    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) [tomcat-catalina-7.0.52.jar:7.0.52]    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) [tomcat-coyote-7.0.52.jar:7.0.52]    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) [tomcat-coyote-7.0.52.jar:7.0.52]    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313) [tomcat-coyote-7.0.52.jar:7.0.52]    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_65]    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_65]    at java.lang.Thread.run(Thread.java:745) [na:1.7.0_65]

初始化应用程序的方式很复杂,因此我需要提供指向完整基本代码的链接以获取更多信息:https : //github.com/dtrunk90/webapp-base。我正在使用它作为Maven叠加层。

这是必要的代码:

初始化程序(来自webapp-base):

public abstract class AbstractWebApplicationInitializer extends AbstractDispatcherServletInitializer {    @Override    protected String[] getServletMappings() {        return new String[] {"/*"};    }    @Override    protected Filter[] getServletFilters() {        CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();        encodingFilter.setEncoding("UTF-8");        encodingFilter.setForceEncoding(true);        return new Filter[] {encodingFilter};    }    @Override    protected WebApplicationContext createRootApplicationContext() {        AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();        ConfigurableEnvironment environment = rootContext.getEnvironment();        environment.setDefaultProfiles("production");        PropertyUtil propertyUtil = PropertyUtil.getInstance(environment.getActiveProfiles());        String[] basePackages = propertyUtil.getPropertySplitTrimmed("webapp", "basePackages");        rootContext.scan(basePackages);        return rootContext;    }    @Override    protected WebApplicationContext createServletApplicationContext() {        return new AnnotationConfigWebApplicationContext();    }}

初始化程序(来自我的webapp):

public class WebApplicationInitializer extends AbstractWebApplicationInitializer {}

@Configuration(来自webapp-base):

@Configuration@EnableTransactionManagementpublic class TransactionConfiguration {    @Bean    public DataSource dataSource() throws IOException {        Properties conProps = PropertyUtil.getInstance().getProperties("jdbc");        if (conProps.containsKey("url")) {            DriverManagerDataSource dataSource = new DriverManagerDataSource(conProps.getProperty("url"), conProps);            dataSource.setDriverClassName(conProps.getProperty("driverClassName"));            return dataSource;        }        return null;    }    @Bean    public SessionFactory sessionFactory() throws IOException {        DataSource dataSource = dataSource();        if (dataSource != null) {            LocalSessionFactoryBuilder sessionBuilder = new LocalSessionFactoryBuilder(dataSource);            sessionBuilder.scanPackages(PropertyUtil.getInstance().getPropertySplitTrimmed("hibernate", "packagesToScan"));            sessionBuilder.addProperties(PropertyUtil.getInstance().getProperties("hibernate"));            return sessionBuilder.buildSessionFactory();        }        return null;    }    @Bean    public HibernateTransactionManager transactionManager() throws IOException {        SessionFactory sessionFactory = sessionFactory();        if (sessionFactory == null) {            return null;        }        return new HibernateTransactionManager(sessionFactory);    }}

@Configuration (来自我的网络应用程序):

@Configurationpublic class MainConfiguration extends WebMvcConfigurerAdapter {    @Autowired    private PageViewInterceptor pageViewInterceptor; // Is annotated with @Component    @Override    public void addInterceptors(InterceptorRegistry registry) {        registry.addInterceptor(pageViewInterceptor);    }}

@Service:

@Servicepublic class PageViewServiceImpl implements PageViewService {    @Autowired    private PageViewDao pageViewDao;    @Override    public void savePageView(long ip, String visitPage, String userAgent) {        PageView obj = new PageView();        obj.setVisitDate(new Date());        obj.setUserAgent(userAgent);        obj.setPage(visitPage);        obj.setIp(ip);        pageViewDao.saveOrUpdate(obj);    }}

@Repository:

@Repositorypublic class PageViewDaoImpl extends GenericDaoImpl<PageView, Long> implements PageViewDao {    @Override    public void saveOrUpdate(PageView obj) {        if (!obj.isBot()) {            super.saveOrUpdate(obj);        }    }}public abstract class GenericDaoImpl<T extends Identifier<I>, I extends Serializable> implements GenericDao<T, I> {    @Autowired    private SessionFactory sessionFactory;    public SessionFactory getSessionFactory() {        if (sessionFactory == null) {            throw new IllegalStateException("SessionFactory has not been set on DAO before usage");        }        return sessionFactory;    }    @Transactional    public void saveOrUpdate(T obj) {        getSessionFactory().getCurrentSession().saveOrUpdate(obj);    }}

然后,我将自动装配PageViewService并使用其方法。

答案1

小编典典

查看你的日志,我可以立即得知你的交易设置设置有误。那是因为TransactionInterceptor堆栈跟踪中没有调用。

TransactionInterceptor当你的web控制器调用实际的服务方法是通过你的Spring服务代理调用。

  1. 确保使用Spring hibernate4类:
org.springframework.orm.hibernate4.HibernateTransactionManager
  1. 不要重写@Transactional方法,而应使用模板模式。

  2. 尝试JPATransactionManager改用,以便你可以EntityManager@PersistenceContext注解注入电流。这比调用sessionFactory.getCurrentSession()每种DAO方法要优雅得多。

@OrderBy导致org.hibernate.HibernateException:无法解析按片段

@OrderBy导致org.hibernate.HibernateException:无法解析按片段

我在项目上添加了@OrderBy,现在出现以下错误:

17:10:35,125 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 51) MSC000001: Failed to start service jboss.persistenceunit."blueMonster.war#blueMonster": org.jboss.msc.service.StartException in service jboss.persistenceunit."blueMonster.war#blueMonster": javax.persistence.PersistenceException: [PersistenceUnit: blueMonster] Unable to build Hibernate SessionFactory    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:172) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final]    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:117) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final]    at java.security.AccessController.doPrivileged(Native Method) [rt.jar:1.8.0_40]    at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:474)    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:182) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final]    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_40]    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_40]    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_40]    at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.1.1.Final.jar:2.1.1.Final]Caused by: javax.persistence.PersistenceException: [PersistenceUnit: blueMonster] Unable to build Hibernate SessionFactory    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1239) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.access$600(EntityManagerFactoryBuilderImpl.java:120) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:855) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:845) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:844) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]    at org.jboss.as.jpa.hibernate4.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44) [jipijapa-hibernate4-3-1.0.1.Final.jar:]    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:154) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final]    ... 8 moreCaused by: org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.collection.OneToManyPersister    at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:253) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]    at org.hibernate.persister.internal.PersisterFactoryImpl.createCollectionPersister(PersisterFactoryImpl.java:201) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:430) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1859) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:852) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]    ... 13 moreCaused by: org.hibernate.HibernateException: Unable to parse order-by fragment    at org.hibernate.sql.ordering.antlr.OrderByFragmentTranslator.translate(OrderByFragmentTranslator.java:69) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]    at org.hibernate.sql.Template.translateOrderBy(Template.java:728) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]    at org.hibernate.persister.collection.AbstractCollectionPersister.<init>(AbstractCollectionPersister.java:578) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]    at org.hibernate.persister.collection.OneToManyPersister.<init>(OneToManyPersister.java:89) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]    at sun.reflect.GeneratedConstructorAccessor32.newInstance(Unknown Source) [:1.8.0_40]    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [rt.jar:1.8.0_40]    at java.lang.reflect.Constructor.newInstance(Constructor.java:422) [rt.jar:1.8.0_40]    at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:231) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]    ... 17 moreCaused by: java.lang.ClassCastException: antlr.CommonToken cannot be cast to antlr.Token    at antlr.CharScanner.makeToken(CharScanner.java:173) [antlr-2.7.7.jar:]    at org.hibernate.sql.ordering.antlr.GeneratedOrderByLexer.mIDENT(GeneratedOrderByLexer.java:239) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]    at org.hibernate.sql.ordering.antlr.GeneratedOrderByLexer.nextToken(GeneratedOrderByLexer.java:139) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]    at antlr.TokenBuffer.fill(TokenBuffer.java:69) [antlr-2.7.7.jar:]    at antlr.TokenBuffer.LA(TokenBuffer.java:80) [antlr-2.7.7.jar:]    at antlr.LLkParser.LA(LLkParser.java:52) [antlr-2.7.7.jar:]    at org.hibernate.sql.ordering.antlr.GeneratedOrderByFragmentParser.expression(GeneratedOrderByFragmentParser.java:565) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]    at org.hibernate.sql.ordering.antlr.GeneratedOrderByFragmentParser.sortKey(GeneratedOrderByFragmentParser.java:346) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]    at org.hibernate.sql.ordering.antlr.GeneratedOrderByFragmentParser.sortSpecification(GeneratedOrderByFragmentParser.java:241) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]    at org.hibernate.sql.ordering.antlr.GeneratedOrderByFragmentParser.orderByFragment(GeneratedOrderByFragmentParser.java:190) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]    at org.hibernate.sql.ordering.antlr.OrderByFragmentTranslator.translate(OrderByFragmentTranslator.java:63) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]    ... 24 more

如果我删除@OrderBy,它将运行正常。

经过一番挖掘后,我发现了一种解决方法,但我无法使用它,该解决方法是更改​​pom.xml并在hibernate核心依赖项上向antl添加排除项

    <dependency>       <groupId>org.hibernate</groupId>       <artifactId>hibernate-core</artifactId>       <version>4.0.1.Final</version>       <scope>provided</scope>       <exclusions>          <exclusion>             <groupId>antlr</groupId>             <artifactId>antlr</artifactId>          </exclusion>       </exclusions>    </dependency>

我正在使用JPA,所以我的pom.xml上没有hibernate-core我对pom.xml的依赖是:

<dependencies>        <dependency>            <groupId>org.jboss.spec.javax.security.auth.message</groupId>            <artifactId>jboss-jaspi-api_1.1_spec</artifactId>            <version>1.0.0.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.spec.javax.security.jacc</groupId>            <artifactId>jboss-jacc-api_1.5_spec</artifactId>            <version>1.0.0.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.spec.javax.ejb</groupId>            <artifactId>jboss-ejb-api_3.2_spec</artifactId>            <version>1.0.0.Final</version>        </dependency>        <dependency>            <groupId>org.hibernate.javax.persistence</groupId>            <artifactId>hibernate-jpa-2.1-api</artifactId>            <version>1.0.0.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.spec.javax.faces</groupId>            <artifactId>jboss-jsf-api_2.2_spec</artifactId>            <version>2.2.8</version>        </dependency>        <dependency>            <groupId>org.jboss.spec.javax.interceptor</groupId>            <artifactId>jboss-interceptors-api_1.2_spec</artifactId>            <version>1.0.0.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.spec.javax.rmi</groupId>            <artifactId>jboss-rmi-api_1.0_spec</artifactId>            <version>1.0.4.Final</version>        </dependency>        <dependency>            <groupId>javax.inject</groupId>            <artifactId>javax.inject</artifactId>            <version>1</version>        </dependency>        <dependency>            <groupId>org.jboss.spec.javax.resource</groupId>            <artifactId>jboss-connector-api_1.7_spec</artifactId>            <version>1.0.0.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.resteasy</groupId>            <artifactId>jaxrs-api</artifactId>            <version>3.0.10.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.spec.javax.xml.bind</groupId>            <artifactId>jboss-jaxb-api_2.2_spec</artifactId>            <version>1.0.4.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.spec.javax.xml.rpc</groupId>            <artifactId>jboss-jaxrpc-api_1.1_spec</artifactId>            <version>1.0.1.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.spec.javax.xml.ws</groupId>            <artifactId>jboss-jaxws-api_2.2_spec</artifactId>            <version>2.0.2.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.spec.javax.xml.soap</groupId>            <artifactId>jboss-saaj-api_1.3_spec</artifactId>            <version>1.0.3.Final</version>        </dependency>        <dependency>            <groupId>wsdl4j</groupId>            <artifactId>wsdl4j</artifactId>            <version>1.6.3</version>        </dependency>        <dependency>            <groupId>org.jboss.spec.javax.jms</groupId>            <artifactId>jboss-jms-api_2.0_spec</artifactId>            <version>1.0.0.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.spec.javax.management.j2ee</groupId>            <artifactId>jboss-j2eemgmt-api_1.1_spec</artifactId>            <version>1.0.1.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.spec.javax.transaction</groupId>            <artifactId>jboss-transaction-api_1.2_spec</artifactId>            <version>1.0.0.Final</version>        </dependency>        <dependency>            <groupId>javax.jws</groupId>            <artifactId>jsr181-api</artifactId>            <version>1.0-MR1</version>        </dependency>        <dependency>            <groupId>com.sun.mail</groupId>            <artifactId>javax.mail</artifactId>            <version>1.5.1</version>        </dependency>        <dependency>            <groupId>javax.enterprise</groupId>            <artifactId>cdi-api</artifactId>            <version>1.1</version>        </dependency>        <dependency>            <groupId>org.jboss.spec.javax.servlet.jstl</groupId>            <artifactId>jboss-jstl-api_1.2_spec</artifactId>            <version>1.1.2.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.spec.javax.servlet.jsp</groupId>            <artifactId>jboss-jsp-api_2.3_spec</artifactId>            <version>1.0.1.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.spec.javax.servlet</groupId>            <artifactId>jboss-servlet-api_3.1_spec</artifactId>            <version>1.0.0.Final</version>        </dependency>        <dependency>            <groupId>javax.activation</groupId>            <artifactId>activation</artifactId>            <version>1.1.1</version>        </dependency>        <dependency>            <groupId>javax.validation</groupId>            <artifactId>validation-api</artifactId>            <version>1.1.0.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.spec.javax.annotation</groupId>            <artifactId>jboss-annotations-api_1.2_spec</artifactId>            <version>1.0.0.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.spec.javax.el</groupId>            <artifactId>jboss-el-api_3.0_spec</artifactId>            <version>1.0.3.Final</version>        </dependency>        <dependency>            <groupId>org.hibernate</groupId>            <artifactId>hibernate-validator</artifactId>            <version>5.1.3.Final</version>        </dependency>        <dependency>            <groupId>org.picketbox</groupId>            <artifactId>picketbox</artifactId>            <version>4.0.21.Final</version>            <exclusions>    <exclusion>      <groupId>org.picketbox</groupId>      <artifactId>picketbox-spi-bare</artifactId>    </exclusion>    <exclusion>      <groupId>org.picketbox</groupId>      <artifactId>jbosssx-bare</artifactId>    </exclusion>    <exclusion>      <groupId>org.jboss.logging</groupId>      <artifactId>jboss-logging-spi</artifactId>    </exclusion>    <exclusion>      <groupId>org.infinispan</groupId>      <artifactId>infinispan-core</artifactId>    </exclusion>  </exclusions>        </dependency>        <dependency>            <groupId>org.picketbox</groupId>            <artifactId>picketbox-commons</artifactId>            <version>1.0.0.final</version>        </dependency>        <dependency>            <groupId>org.picketbox</groupId>            <artifactId>picketbox-infinispan</artifactId>            <version>4.0.21.Final</version>        </dependency>        <dependency>            <groupId>org.wildfly</groupId>            <artifactId>wildfly-controller-client</artifactId>            <version>8.2.0.Final</version>        </dependency>        <dependency>            <groupId>org.jboss</groupId>            <artifactId>jboss-dmr</artifactId>            <version>1.2.0.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.logging</groupId>            <artifactId>jboss-logging</artifactId>            <version>3.1.4.GA</version>        </dependency>        <dependency>            <groupId>org.jboss.resteasy</groupId>            <artifactId>resteasy-jaxb-provider</artifactId>            <version>3.0.10.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.resteasy</groupId>            <artifactId>async-http-servlet-3.0</artifactId>            <version>3.0.10.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.resteasy</groupId>            <artifactId>resteasy-client</artifactId>            <version>3.0.10.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.resteasy</groupId>            <artifactId>resteasy-jaxrs</artifactId>            <version>3.0.10.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.resteasy</groupId>            <artifactId>resteasy-multipart-provider</artifactId>            <version>3.0.10.Final</version>        </dependency>        <dependency>            <groupId>org.jboss.ejb3</groupId>            <artifactId>jboss-ejb3-ext-api</artifactId>            <version>2.1.0</version>        </dependency>        <dependency>            <groupId>org.primefaces</groupId>            <artifactId>primefaces</artifactId>            <version>5.2</version>        </dependency>        <dependency>            <groupId>org.primefaces.themes</groupId>            <artifactId>all-themes</artifactId>            <version>1.0.10</version>        </dependency>        <dependency>            <groupId>org.hibernate</groupId>            <artifactId>hibernate-infinispan</artifactId>            <version>4.2.1.Final</version>             <exclusions>    <exclusion>      <groupId>org.hibernate</groupId>      <artifactId>hibernate-core</artifactId>    </exclusion>  </exclusions>        </dependency>        <dependency>            <groupId>org.webjars</groupId>            <artifactId>font-awesome</artifactId>            <version>4.3.0</version>        </dependency>        <dependency>            <groupId>org.omnifaces</groupId>            <artifactId>omnifaces</artifactId>            <version>2.0</version>        </dependency>        <dependency>            <groupId>org.apache.commons</groupId>            <artifactId>commons-lang3</artifactId>            <version>3.3.2</version>        </dependency>        <dependency>            <groupId>commons-fileupload</groupId>            <artifactId>commons-fileupload</artifactId>            <version>1.3.1</version>        </dependency>        <dependency>            <groupId>commons-io</groupId>            <artifactId>commons-io</artifactId>            <version>2.4</version>        </dependency>        <dependency>            <groupId>org.apache.poi</groupId>            <artifactId>poi</artifactId>            <version>3.10.1</version>        </dependency>        <dependency>            <groupId>org.seleniumhq.selenium</groupId>            <artifactId>selenium-java</artifactId>            <version>2.45.0</version>        </dependency>        <dependency>            <groupId>net.sf.opencsv</groupId>            <artifactId>opencsv</artifactId>            <version>2.3</version>        </dependency>        <dependency>            <groupId>xml-apis</groupId>            <artifactId>xml-apis</artifactId>            <version>1.4.01</version>        </dependency>        <dependency>            <groupId>org.apache.httpcomponents</groupId>            <artifactId>httpclient</artifactId>            <version>4.3.6</version>        </dependency>        <dependency>            <groupId>org.apache.httpcomponents</groupId>            <artifactId>httpcore</artifactId>            <version>4.3.3</version>        </dependency>        <dependency>            <groupId>com.byteslounge</groupId>            <artifactId>cdi-properties</artifactId>            <version>1.0.0</version>        </dependency>        <dependency>            <groupId>org.apache.deltaspike.core</groupId>            <artifactId>deltaspike-core-api</artifactId>            <version>1.2.1</version>        </dependency>        <dependency>            <groupId>org.apache.deltaspike.core</groupId>            <artifactId>deltaspike-core-impl</artifactId>            <version>1.2.1</version>            <scope>runtime</scope>        </dependency>    </dependencies>

我正在使用Wildfly,如何解决此问题?

阅读@GuillermoFernández答复后,我做了以下工作:

mvn dependency:tree -Dincludes=antlr

结果是:

[INFO] blueMonster:blueMonster:war:0.0.1-SNAPSHOT[INFO] \- org.hibernate:hibernate-infinispan:jar:4.2.1.Final:compile[INFO]    \- org.hibernate:hibernate-core:jar:4.2.1.Final:compile[INFO]       \- antlr:antlr:jar:2.7.7:compile

按照他的步骤,我还更新了pom.xml,但是由于错误的发生,还有其他原因也会导致该错误,我该如何识别必须排除的错误?

我的@OrderBy

@OrderBy("data") @OneToMany(cascade = CascadeType.ALL, mappedBy = "csr")    private List<CsrSeveridadeLog> severidadeLogList;

答案1

小编典典

经过几次排除尝试后,我解决了添加问题

-DANTLR_USE_DIRECT_CLASS_LOADING=true

c# – NHibernate – NHibernate.Exceptions.GenericADOException:无法执行查询

c# – NHibernate – NHibernate.Exceptions.GenericADOException:无法执行查询

我似乎随机发生以下异常:

NHibernate.Exceptions.GenericADOException: Could not execute query
    [ select businesspr0_.BusinessProcessID as col_0_0_,businesspr0_.ProcessNumber as col_1_0_,businesspr1_.Name as col_2_0_,businesspr0_.DateCreated as col_3_0_,actor2_.displayName as col_4_0_,usergroup3_.Name as col_5_0_,processele5_.Name as col_6_0_ from BusinessProcess businesspr0_ inner join BusinessProcess businesspr1_ on businesspr0_.DeFinitionID=businesspr1_.BusinessProcessID inner join Actor actor2_ on businesspr0_.ActorCreatedID=actor2_.ActorID left outer join UserGroup usergroup3_ on businesspr0_.UserGroupCreatedID=usergroup3_.UserGroupID left outer join Actor usergroup3_1_ on usergroup3_.UserGroupID=usergroup3_1_.ActorID inner join ActiveElement activeelem4_ on businesspr0_.BusinessProcessID=activeelem4_.BusinessProcessID inner join ProcessElement processele5_ on activeelem4_.ProcessElementID=processele5_.ProcessElementID inner join ProcessEmployees processemp6_ on businesspr0_.BusinessProcessID=processemp6_.BusinessProcessID inner join Actor actor7_ on processemp6_.ActorID=actor7_.ActorID inner join UserInGroups users8_ on actor7_.ActorID=users8_.UserGroupID inner join AppUser user9_ on users8_.UserID=user9_.UserID inner join Actor user9_1_ on user9_.UserID=user9_1_.ActorID where businesspr0_.IsDeFinition=0 and (businesspr0_.Finished is null) and @p0=user9_.UserID ]
      Name:userID - Value:32771
    [sql: select businesspr0_.BusinessProcessID as col_0_0_,processele5_.Name as col_6_0_ from BusinessProcess businesspr0_ inner join BusinessProcess businesspr1_ on businesspr0_.DeFinitionID=businesspr1_.BusinessProcessID inner join Actor actor2_ on businesspr0_.ActorCreatedID=actor2_.ActorID left outer join UserGroup usergroup3_ on businesspr0_.UserGroupCreatedID=usergroup3_.UserGroupID left outer join Actor usergroup3_1_ on usergroup3_.UserGroupID=usergroup3_1_.ActorID inner join ActiveElement activeelem4_ on businesspr0_.BusinessProcessID=activeelem4_.BusinessProcessID inner join ProcessElement processele5_ on activeelem4_.ProcessElementID=processele5_.ProcessElementID inner join ProcessEmployees processemp6_ on businesspr0_.BusinessProcessID=processemp6_.BusinessProcessID inner join Actor actor7_ on processemp6_.ActorID=actor7_.ActorID inner join UserInGroups users8_ on actor7_.ActorID=users8_.UserGroupID inner join AppUser user9_ on users8_.UserID=user9_.UserID inner join Actor user9_1_ on user9_.UserID=user9_1_.ActorID where businesspr0_.IsDeFinition=0 and (businesspr0_.Finished is null) and @p0=user9_.UserID]
 ---> system.indexOutOfRangeException: col_0_0_
       at System.Data.ProviderBase.FieldNameLookup.Getordinal(String fieldName)
       at System.Data.sqlClient.sqlDataReader.Getordinal(String name)
       at NHibernate.Driver.NHybridDataReader.Getordinal(String name)
       at NHibernate.Type.NullableType.NullSafeGet(IDataReader rs,String name)
       at NHibernate.Type.NullableType.NullSafeGet(IDataReader rs,String[] names,ISessionImplementor session,Object owner)
       at NHibernate.Hql.Ast.ANTLR.Loader.QueryLoader.GetResultColumnorRow(Object[] row,IResultTransformer resultTransformer,IDataReader rs,ISessionImplementor session)
       at NHibernate.Loader.Loader.GetRowFromresultSet(IDataReader resultSet,QueryParameters queryParameters,LockMode[] lockModeArray,EntityKey optionalObjectKey,IList hydratedobjects,EntityKey[] keys,Boolean returnProxies)
       at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session,Boolean returnProxies)
       at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session,Boolean returnProxies)
       at NHibernate.Loader.Loader.DoList(ISessionImplementor session,QueryParameters queryParameters)
       --- End of inner exception stack trace ---
       at DotExe.TiCat.DomainModel.Repository.ProcessModel.BusinessProcessDAO.GetProcessForUserGroups(Int32 userID) in D:\Projects\TiCatRNIDS\DotExe.TiCat4\DotExe.TiCat.DomainModel.Repository\ProcessModel\BusinessProcessDAO.cs:line 98
       at DotExe.TiCat4.UseCaseRepository.TicketProcess.TicketQueues.RefreshQueue() in D:\Projects\TiCatRNIDS\DotExe.TiCat4\DotExe.TiCat4\UseCaseRepository\TicketProcess\TicketQueues.cs:line 128

奇怪的部分是这个system.indexOutOfRangeException:col_0_0_我无法弄清楚为什么会发生.
如有必要,我可以使用一些xml映射更新帖子.

TNX

更新:

映射和查询抛出ex:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DotExe.TiCat.DomainModel" namespace="DotExe.TiCat.DomainModel.Process">

  <class name="BusinessProcess" table="BusinessProcess">
    <id name="BusinessProcessID">
      <generator/>
    </id>
    <property name = "Name" length="1024" type="string" not-null ="false" />
    <property name = "Description" length="5000" type="string" not-null ="false" />
    <property name = "ProcessNumber" length="500" type="string" not-null ="false" />
    <property name = "CommentOnSolve" length="5000" type="string" not-null ="false" />
    <property name="IsDeFinition" type="bool"/>
    <property name="PlaningTimetoSpend" type="long"/>
    <property name="SpendTime" type="long"/>
    <property name="DateCreated" type="DateTime" not-null="false"/>
    <property name="PlanToStart" type="DateTime" not-null="false"/>
    <property name="PlanToFinish" type="DateTime" not-null="false"/>
    <property name="Started" type="DateTime" not-null="false"/>
    <property name="Finished" type="DateTime" not-null="false"/>
    <property name="CustomerRequestCallBack" type="bool" not-null="false"/>
    <property name="EscalationTimeLimitInPercents" type="int"/>
    <property name="IsEscalated" type="bool"/>
    <property name="IsInfinite" type="bool"/>
    <many-to-one name="WorkingWeek"column="WorkingWeekID" not-null="false" lazy="false"/>
    <many-to-one name="Priority"https://www.jb51.cc/tag/ssp/" target="_blank">sspriority" column="PriorityID" not-null="false" lazy="false"/>
    <many-to-one name="UserCreated"column="ActorCreatedID" not-null="false" lazy="false"/>
    <many-to-one name="UserSolved"column="ActorSolvedID" not-null="false" lazy="false"/>
    <many-to-one name="GroupCreated"column="UserGroupCreatedID" not-null="false" lazy="false"/>
    <many-to-one name="GroupSolved"column="UserGroupSolvedID" not-null="false" lazy="false"/>
    <many-to-one name="DeFinition"https://www.jb51.cc/tag/nes/" target="_blank">nessProcess" column="DeFinitionID" cascade="none" />      
    <set name="Elements" lazy="false" cascade="save-update">
      <key column="BusinessProcessID"/>
      <one-to-many/>
    </set>
    <set name="ActiveElements" table="ActiveElement" lazy="false" cascade="save-update">
      <key column="BusinessProcessID"/>
      <many-to-manycolumn="ProcessElementID"/>
    </set>
    <set name="ProcessConsumers" table="ProcessConsumers" lazy="false" cascade="save-update">
      <key column="BusinessProcessID"/>
      <many-to-manycolumn="ActorID"/>
    </set>
    <set name="ProcessEmployees" table="ProcessEmployees" lazy="false">
      <key column="BusinessProcessID"/>
      <many-to-manycolumn="ActorID"/>
    </set>
    <set name="ProcessSupervisors" table="ProcessSupervisors" lazy="false">
      <key column="BusinessProcessID"/>
      <many-to-manycolumn="ActorID"/>
    </set>
    <set name="Flows" lazy="false" cascade="save-update">
      <key column="BusinessProcessID"/>
      <one-to-many/>
    </set>
    <set name="PriorityTimeRules" lazy="false" cascade="save-update">
      <key column="BusinessProcessID"/>
      <one-to-manyhttps://www.jb51.cc/tag/nes/" target="_blank">nessRules.PriorityTimeRule"/>
    </set>
  </class>

  <class name="ProcessElement" table="ProcessElement">
    <id name="ProcessElementID">
      <generator/>
    </id>
    <property name = "Name" length="1024" type="string" not-null ="true" />
    <property name="IsDeFinition" type="bool"/>
    <property name="Isstate" type="bool"/>

    <many-to-onehttps://www.jb51.cc/tag/nes/" target="_blank">nessProcess" name="MemberOf" lazy="false" cascade="save-update" column="BusinessProcessID"/>
    <many-to-onename="DeFinition" column="DeFinitionID"/>

    <joined-subclass name="Activity">
      <key column="ActivityID"/>
      <property name = "Name" length="1024" type="string" not-null ="true" />
      <property name = "Description" length="4000" type="string" not-null ="false" />
      <set name="States" >
        <key column="ActivityID"/>
        <one-to-many/>
      </set>

      <joined-subclass name="UserTask" table="UserTask">
        <key column="UserTaskID"/>
        <property name="PlaningTimetoSpend" type="int"/>
        <property name="SpendTime" type="int"/>
        <property name="PlanToStart" type="DateTime" not-null="false"/>
        <property name="PlanToFinish" type="DateTime" not-null="false"/>
        <property name="Started" type="DateTime" not-null="false"/>
        <property name="Finished" type="DateTime" not-null="false"/>
        <set name="Comments">
          <key column="UserTaskID"/>
          <one-to-many/>
        </set>
        <set name="UserTaskEmployees">
          <key column="UserTaskID"/>
          <many-to-manycolumn="ActorID"/>
        </set>
        <set name="UserTaskSupervisors">
          <key column="UserTaskID"/>
          <many-to-manycolumn="ActorID"/>
        </set>
        <set name="Priorities">
          <key column="UserTaskID"/>
          <one-to-many/>
        </set>
        <set name="AssignmentRules">
          <key column="UserTaskID"/>
          <one-to-manyhttps://www.jb51.cc/tag/nes/" target="_blank">nessRules.AssignmentRule"/>
        </set>
        <many-to-onehttps://www.jb51.cc/tag/fig/" target="_blank">fig" name="Application" column="ApplicationConfigID"/>
        <many-to-onename="TaskPriority" column="TaskPriorityID"/>
      </joined-subclass>

      <joined-subclass name="SendTask">
        <key column="SendTaskID"></key>
        <many-to-one name="EmailAccount"https://www.jb51.cc/tag/fig/" target="_blank">fig.EmailAccount" column="EmailAccountID" lazy="false"></many-to-one>
        <many-to-one name="Template"column="TemplateID" lazy="false"></many-to-one>
        <set name="Actors" lazy="false">
          <key column="SendTaskID"></key>
          <many-to-manycolumn="ActorID"></many-to-many>
        </set>
        <set name="EmailMessages">
          <key column="SendTaskID"></key>
          <one-to-many/>
        </set>
      </joined-subclass>
    </joined-subclass>

    <joined-subclass name="Gateway">
      <key column="GatewayID"/>
      <joined-subclass name="ExclusiveGateway">
        <key column="ExclusiveGatewayID"/>
      </joined-subclass>
    </joined-subclass>

    <joined-subclass name="Event">
      <key column="EventID"></key>
      <property name="ExecutionTime" type="DateTime" not-null="false"></property>

      <joined-subclass name="StartEvent">
        <key column="StartEventID"></key>
      </joined-subclass>

      <joined-subclass name="EndEvent">
        <key column="EntEventID"></key>
      </joined-subclass>
    </joined-subclass>
  </class>
  <class name="ActivityState" table="ActivityState">
    <id name="ActivityStateID">
      <generator/>
    </id>
    <property name = "Name" length="1024" type="string" not-null ="true" />
    <property name = "Description" length="4000" type="string" not-null ="false" />
    <many-to-one name="StateOf"column="ActivityID"/>
    <property name="IsEndState" type="bool"/>
    <property name="IsstartState" type="bool"/>
    <property name="IsPauseState" type="bool"/>
    <property name="IsProcessSerializationState" type="bool"/>
  </class>
  <class name="SequenceFlow" table ="SequenceFlow">
    <id name="SequenceFlowID">
      <generator/>
    </id>
    <many-to-onename="Source" column="SourceID" lazy="false" cascade="save-update"/>
    <many-to-onename="Target" column="TargetID" lazy="false" cascade="save-update"/>
    <many-to-one name="Process"https://www.jb51.cc/tag/nes/" target="_blank">nessProcess" column="BusinessProcessID" cascade="save-update"/>
  </class>
  <class name="UserTaskPriority" table ="UserTaskPriority">
    <id name="UserTaskPriorityID">
      <generator/>
    </id>
    <property name = "Name" length="1024" type="string" not-null ="true" />
  </class>
  <class name="TaskComment" table ="TaskComment">
    <id name="TaskCommentID">
      <generator/>
    </id>
    <property name = "Comment" length="4000" type="string" not-null ="true" />
    <many-to-one name="Task"column="UserTaskID"/>
    <many-to-one name="Actor"column="ActorID"/>
    <many-to-one name="Process"https://www.jb51.cc/tag/nes/" target="_blank">nessProcess" column="BusinessProcessID"/>
    <many-to-one name="Group"column="UserGroupID"/>
    <property name="CommentTime" type="DateTime" not-null="false" />
  </class>
  <class name="TransitionLog">
    <id name="TransitionLogID">
      <generator/>
    </id>
    <property name="LogDate" type="DateTime"/>
    <property name="TaskStarted" type="DateTime" not-null ="false" />
    <property name="TaskEnded" type="DateTime" not-null ="false" />
    <property name="TimeSpend" type="int" not-null ="false" />
    <set name="SendToActors" table="SendToActorLog" lazy="false">
      <key column="TransitionLogID"/>
      <many-to-manycolumn="ActorID"/>
    </set>
    <many-to-one name="Actor"column="ActorID" lazy="false"/>
    <many-to-one name="Group"column="UserGroupID"/>
    <many-to-one name="fromElement"column="fromElementID" lazy="false"/>
    <many-to-one name="toElement"column="toElementID"/>
    <many-to-one name="Process"https://www.jb51.cc/tag/nes/" target="_blank">nessProcess" column="BusinessProcessID"/>
    <many-to-one name="LogType"column="LogTypeID" lazy="false"/>
    <property name="Comment" length="4000" type="string" not-null ="false" />
  </class>
  <class name="LogType">
    <id name="LogTypeID"/>
    <property name = "Name" length="1024" type="string" not-null ="false" />
    <property name = "displayName" length="1024" type="string" not-null ="false" />
  </class>

  <class name="Processpriority">
    <id name="ProcesspriorityID"/>
    <property name = "Name" length="1024" type="string" not-null ="false" />
    <property name = "displayName" length="1024" type="string" not-null ="false" />
  </class>

  <class name="WorkingWeek">
    <id name="WorkingWeekID">
      <generator/>
    </id>
    <property name="MondayFrom" type="DateTime" not-null="true"/>
    <property name="MondayTo" type="DateTime" not-null="true"/>
    <property name="TuesdayFrom" type="DateTime" not-null="true"/>
    <property name="TuesdayTo" type="DateTime" not-null="true"/>
    <property name="WednesdayFrom" type="DateTime" not-null="true"/>
    <property name="WednesdayTo" type="DateTime" not-null="true"/>
    <property name="ThursdayFrom" type="DateTime" not-null="true"/>
    <property name="ThursdayTo" type="DateTime" not-null="true"/>
    <property name="FridayFrom" type="DateTime" not-null="true"/>
    <property name="FridayTo" type="DateTime" not-null="true"/>
    <property name="SaturdayFrom" type="DateTime" not-null="true"/>
    <property name="SaturdayTo" type="DateTime" not-null="true"/>
    <property name="SundayFrom" type="DateTime" not-null="true"/>
    <property name="SundayTo" type="DateTime" not-null="true"/>
    <property name="Is24x7" type="bool"/>
    <property name="Name" type="string" length="256" not-null="true"/>
    <!--<set name="BusinessProcesses" cascade="none" lazy="false">
      <key column="WorkingWeekID"/>
      <one-to-manyhttps://www.jb51.cc/tag/nes/" target="_blank">nessProcess"/>
    </set>-->

  </class>

</hibernate-mapping>

和查询:

IList<object[]> result =
                        session.createquery(" select bp.BusinessProcessID,bp.ProcessNumber,def.Name as DeFinition," +
                                            " bp.DateCreated,actor.displayName as UserCreated," +
                                            " group.Name as GroupCreated,task.Name as ActiveTask " +
                                            " from BusinessProcess bp " +
                                            " join bp.DeFinition as def " +
                                            " join bp.UserCreated as actor " +
                                            " left join bp.GroupCreated as group " +
                                            " join bp.ActiveElements as task" +
                                            " join bp.ProcessEmployees as res" +
                                            " join res.Users as users " +
                                            " where bp.IsDeFinition = false " +
                                            " and bp.Finished is null" +
                                            " and :userID = users.ActorID").SetParameter("userID",userID).List<object[]>();

解决方法

当我尝试将空值映射到不可为空的属性(即整数)时,我遇到了这个错误.确保你确保sql值是不可为空的,或者只是使c#属性为nullable(public virtual int?NumberOfPoints {get; set;})

c# – NHibernate.Exceptions.GenericADOException:无法执行查询

c# – NHibernate.Exceptions.GenericADOException:无法执行查询

我有一个遗留应用程序(vfp 8),我需要从中提取数据(无插入).我使用Accnum字段作为主键,它在表中定义为字符11.

工厂配置:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<reflection-optimizer use="false" />
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect">NHibernate.Dialect.GenericDialect</property>
<property name="connection.driver_class">NHibernate.Driver.OleDbDriver</property>
<property name="connection.connection_string">Provider=VFPOLEDB.1;Data Source=C:\Analysis\Quantium\development\RD warehouse\_RDAUWH\Data;Collating Sequence=MACHINE</property>
<property name="show_sql">false</property>
</session-factory>
</hibernate-configuration>

这是我的映射文件:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
               assembly="RDLabels"
               namespace="RDLabels.Domain">

  <class name="CustMast">
    <id name="Accnum" column="Accnum" type="string">
    <generator/>
    </id>
    <property name="Fullname" />
    <property name="Add" />
    <property name="State" />
  </class>  
</hibernate-mapping>

班级:

public class CustMast
{
    private string _accnum;
    public virtual string Accnum
    {
        get { return _accnum; }
        set { _accnum = value; }
    }
    private string _fullname;
    public virtual string Fullname
    {
        get { return _fullname; }
        set { _fullname = value; }
    }
    private string _add;
    public virtual string Add
    {
        get { return _add; }
        set { _add = value; }
    }
    private string _state;
    public virtual string State
    {
        get { return _state; }
        set { _state = value; }
    }
}

以下是获取记录的代码:

public CustMast GetByAccnum(String accnum)
{
        using (ISession session = NHibernateHelper.OpenSession())
        {
            CustMast custMast = session
                                .CreateCriteria(typeof(CustMast))
                                .Add(Restrictions.Eq("Accnum",accnum))
                                .UniqueResult<CustMast>();
            return custMast;
        }
}

完整的错误是:

NHibernate.Exceptions.GenericADOException : Could not execute query
[ SELECT this_.Accnum as Accnum0_0_,this_.Fullname as Fullname0_0_,this_.Add as Add0_0_,this_.State as State0_0_ FROM CustMast this_ WHERE this_.Accnum = ? ]
Name:cp0 - Value:00059337444
[sql: SELECT this_.Accnum as Accnum0_0_,this_.State as State0_0_ FROM CustMast this_ WHERE this_.Accnum = ?]
----> system.indexOutOfRangeException : Invalid index 0 for this OleDbParameterCollection with Count=0. - d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Loader.cs:1590

运行NHibernate Profiler,它显示:

WARN: 
reflection-optimizer property is ignored out of application configuration file.


WARN: 
system.indexOutOfRangeException: Invalid index 0 for this OleDbParameterCollection with Count=0.
at System.Data.OleDb.OleDbParameterCollection.RangeCheck(Int32 index)
at System.Data.OleDb.OleDbParameterCollection.GetParameter(Int32 index)
at System.Data.Common.DbParameterCollection.System.Collections.IList.get_Item(Int32 index)
at NHibernate.Driver.DriverBase.ExpandQueryParameters(IDbCommand cmd,sqlString sqlString) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Driver\DriverBase.cs:line 235
at NHibernate.AdoNet.AbstractBatcher.ExpandQueryParameters(IDbCommand cmd,sqlString sqlString) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\AdoNet\AbstractBatcher.cs:line 232
at NHibernate.Loader.Loader.PrepareQueryCommand(QueryParameters queryParameters,Boolean scroll,ISessionImplementor session) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Loader.cs:line 1152

ERROR: 
Invalid index 0 for this OleDbParameterCollection with Count=0.

解决方法

每当我传递一个参数时,我都在努力解决我的linq查询丢失相同的错误.如果我没有传递任何参数并做了session.Query()他们会工作正常.

我挣扎了几天,但我发现这张Nhibernate jira票here.它解释了sqlParameters和Iseries Db2提供程序的明显问题.

我知道您使用的是其他提供商,但您可能只需下载最新的Nhibernate核心源代码,构建它并在项目中引用最新版本即可获益.它解决了我的问题.

Hibernate org.hibernate.LazyInitializationException:无法延迟初始化角色集合:

Hibernate org.hibernate.LazyInitializationException:无法延迟初始化角色集合:

我有以下提到的实体类,当我执行我的应用程序时,我得到了以下异常。其他一些类似的问题也不能解决问题。

WARNING: StandardWrapperValve[jersey-serlvet]: PWC1406: Servlet.service()
for servlet jersey-serlvet threw exception
org.hibernate.LazyInitializationException: failed to lazily initialize 
a collection of role: test.entity.Dept.empDeptno,no session
or session was closed
at org.hibernate.collection.internal.AbstractPersistentCollection.
throwLazyInitializationException(AbstractPersistentCollection.java:393)
       at    org.hibernate.collection.internal.AbstractPersistentCollection.
throwLazyInitializationExceptionIfNotConnected
(AbstractPersistentCollection.java:385)
    at org.hibernate.collection.internal.AbstractPersistentCollection.
initialize(AbstractPersistentCollection.java:378)

我该如何解决这个问题?

Emp实体

@Entity
@Table(name = "EMP",schema = "SCOTT"
)
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Emp.findAllEmployees",query = "select e from Emp e left 
    join fetch e.deptNo order by e.empno desc")
})
public class Emp implements java.io.Serializable {
@Id
@Column(name = "EMPNO",unique = true,nullable = false,precision = 4,scale = 0)
private short empno;
@ManyToOne
@JoinColumn(name = "DEPTNO",referencedColumnName = "DEPTNO")
private Dept deptNo;

部门实体

@Entity
@Table(name = "DEPT",schema = "SCOTT"
)
@XmlRootElement
public class Dept implements java.io.Serializable {
@Id
@Column(name = "DEPTNO",precision = 2,scale = 0)
private short deptno;
@OneToMany(fetch=FetchType.LAZY,mappedBy = "deptNo")
private Set<Emp> empDeptno;

DAOImpl

@Override
public List<Emp> findAllEmployees() {
  return getEntityManager().createNamedQuery("Emp.findAllEmployees",Emp.class).getResultList();
}

泽西岛RESTful服务

 @Component
 @Path("/employee")
 public class EmployeeRestService {

 @Autowired
 EmployeeService employeeService;

 @GET
 @Produces({MediaType.APPLICATION_JSON})
 public List<Emp> getEmployees() {
 List<Emp> emp = new ArrayList<Emp>();
 emp.addAll(getEmployeeService().findAllEmployees());
 return emp;
 }

springapplicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"
>
    <!-- Data Source Declaration -->    
    <bean id="DataSource">
        <property name="jndiName" value="jdbc/scottDS"/>   
    </bean>

    <context:component-scan base-package="net.test" />
    <bean/>
    <bean id="entityManagerFactory">
        <property name="dataSource" ref="DataSource" />
        <property name="packagesToScan" value="net.test" />
        <property name="jpaVendorAdapter">
            <bean>
                <property name="showSql" value="false" />
                <property name="generateDdl" value="false" />
                <property name="databasePlatform" value="${jdbc.dialectClass}" />
            </bean>
        </property>
    </bean>
    <bean id="defaultLobHandler"/>  
    <!-- Transaction Config -->
    <bean id="transactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager"/>          
    <context:annotation-config/>
    <bean id="hibernateStatisticsMBean">
        <property name="statisticsEnabled" value="true" />
        <property name="sessionFactory" value="#{entityManagerFactory.sessionFactory}" />
    </bean>
</beans>

今天关于HibernateException:无法获取当前线程的事务同步会话无法获取事件数据的讲解已经结束,谢谢您的阅读,如果想了解更多关于@OrderBy导致org.hibernate.HibernateException:无法解析按片段、c# – NHibernate – NHibernate.Exceptions.GenericADOException:无法执行查询、c# – NHibernate.Exceptions.GenericADOException:无法执行查询、Hibernate org.hibernate.LazyInitializationException:无法延迟初始化角色集合:的相关知识,请在本站搜索。

本文标签: