gpt4 book ai didi

java - Hibernate 4 Multi-Tenancy 问题 - 未找到实体持久存在

转载 作者:行者123 更新时间:2023-12-01 11:22:51 26 4
gpt4 key购买 nike

我一直在尝试在我们的应用程序中集成 hibernate 4 Multi-Tenancy 支持,但在执行 hql 查询时出现以下异常

java.lang.ArrayIndexOutOfBoundsException: 0
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.resultClassChecking(AbstractEntityManagerImpl.java:362)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:344)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:344)
at com.sun.proxy.$Proxy288.createQuery(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:291)
at com.sun.proxy.$Proxy43.createQuery(Unknown Source)

hql 查询是 -

List<Field> fields = entityManager.createQuery("from " + Employee.class.getName() +
" where " + getQueryForInClause("id", ids), Employee.class).getResultList();

在调试hibernate源代码时,我意识到这是因为hibernate的SessionFactory实例没有任何entityPersister实例,因此hql查询确实有任何转换器。

是因为实体 bean 没有被扫描吗?如果是这样,可能是什么原因?

entityFactory spring 声明如下

<property name="persistenceProviderClass" value="org.hibernate.jpa.HibernatePersistenceProvider"/>
<property name="persistenceXmlLocation" value="/com/software/persistence/persistence.xml"/>
<property name="jpaProperties">
<map>
<entry key="hibernate.id.new_generator_mappings" value="true"/>
<entry key="hibernate.cache.use_second_level_cache" value="false"/>
<entry key="hibernate.dialect" value="com.software.persistence.ExtendedOracle10gDialect"/>
<entry key="hibernate.jdbc.batch_size" value="10"/>
<entry key="hibernate.jdbc.batch_versioned_data" value="true"/>
<entry key="hibernate.jdbc.batch.builder" value="com.software.persistence.OracleBatchBuilder"/>
<entry key="hibernate.multiTenancy" value="DATABASE"/>
<entry key="hibernate.tenant_identifier_resolver"
value="com.software.persistence.MultitenantIdentifierResolver"/>
<entry key="hibernate.multi_tenant_connection_provider"
value-ref="multiTenantConnectionProvider" />
</map>
</property>

最佳答案

大多数错误似乎是因为实体 bean 没有被扫描。

您也可以分享 persistence.xml 以供引用吗?

可以尝试以下操作以进一步调试(其中一个步骤可能会解决我猜的问题)

1 将 persistenceXmlLocation 与类路径指定为 <property name="persistenceXmlLocation" value="classpath:/com/software/persistence/persistence.xml"/>

2 尝试使用 persistenceUnitPostProcessors 扫描像这样的 beans <property name="persistenceUnitPostProcessors" ref="some_implementation_bean_ref"/>

关于java - Hibernate 4 Multi-Tenancy 问题 - 未找到实体持久存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31048859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com