我的< code > application context . XML 是:
<aop:aspectj-autoproxy/>
<context:component-scan base-package="com"/>
<context:annotation-config/>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
<tx:jta-transaction-manager/>
<tx:annotation-driven/>
<jee:jndi-lookup id="corePU" jndi-name="java:/exampleDatasource" expected-type="javax.sql.DataSource"/>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceXmlLocation" value="classpath:/META-INF/persistence.xml" />
<property name="persistenceUnitName" value="corePU" />
<property name="packagesToScan" value="com" />
</bean>
每个实体都有@Entity
和持久性.xml
设置以下属性
Hibernate version : 5.1.0.Final
Spring version : 4.1.3.RELEASE
JPA 2.0
WildFly 10
在
applicationContext.xml
中,我定义了一个entityManagerFactory bean,如下所示。"
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceXmlLocation" value="classpath:/META-INF/persistence.xml" />
<property name="persistenceUnitName" value="corePU" />
<property name="packagesToScan" value="com" />
</bean>
持久性。xml
如下:
<persistence-unit name="corePU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>java:/exampleDatasource</jta-data-source>
<!--<class>com.entity.Address</class>-->
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<!--<shared-cache-mode>NONE</shared-cache-mode>-->
<properties>
<property name="hibernate.hbm2ddl.auto" value="validate" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.format_sql" value="false"/>
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform"/>
<property name="org.hibernate.envers.audit_table_prefix" value="z_"/>
<property name="hibernate.cache.use_second_level_cache" value="false" />
<property name="hibernate.generate_statistics" value="false"/>
<property name="hibernate.cache.use_query_cache" value="false"/>
<property name="hibernate.archive.autodetection" value="class, hbm" />
</properties>
</persistence-unit>
下面是我得到的错误:
21:15:47,463 ERROR [stderr] (default task-4) java.lang.IllegalArgumentException: Unknown entity: com.entity.Address
21:15:47,463 ERROR [stderr] (default task-4) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1149)
21:15:47,464 ERROR [stderr] (default task-4) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
21:15:47,464 ERROR [stderr] (default task-4) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
21:15:47,464 ERROR [stderr] (default task-4) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
21:15:47,464 ERROR [stderr] (default task-4) at java.lang.reflect.Method.invoke(Method.java:498)
21:15:47,464 ERROR [stderr] (default task-4) at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:347)
21:15:47,464 ERROR [stderr] (default task-4) at com.sun.proxy.$Proxy93.persist(Unknown Source)
21:15:47,464 ERROR [stderr] (default task-4) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
21:15:47,464 ERROR [stderr] (default task-4) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
21:15:47,464 ERROR [stderr] (default task-4) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
21:15:47,464 ERROR [stderr] (default task-4) at java.lang.reflect.Method.invoke(Method.java:498)
21:15:47,465 ERROR [stderr] (default task-4) at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:298)
21:15:47,465 ERROR [stderr] (default task-4) at com.sun.proxy.$Proxy50.persist(Unknown Source)
21:15:47,465 ERROR [stderr] (default task-4) at com.manager.manager.getAddress(manager.java:37)
21:15:47,465 ERROR [stderr] (default task-4) at com.manager.manager$$FastClassBySpringCGLIB$$e766fff.invoke(<generated>)
21:15:47,465 ERROR [stderr] (default task-4) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
如何使用我的实体,而不用< code>class
标记在< code>persistence.xml中显式指定每个实体?
您应该在实体
管理器/会话工厂
配置中设置包到扫描
属性。
例如:
< code > packagesToScan = " com . manager "
或者,如果您使用的是Spring启动,则可以使用@EntityScan
注释:
Spring Boot 1.4
Spring Boot
JPA和Spring是两个不同的东西。
Spring的<代码>
本地容器实体管理器工厂 Bean
属性包ToScan
。请参阅此帖子,例如:https://stackoverflow.com/a/16088340/2816631。查看Spring javadoc对< code>packagesToScan的描述:
设置是否对类路径中的实体类使用基于Spring的扫描,而不是使用JPA对包含persistence.xml标记的jar文件的标准扫描。对于基于Spring的扫描,不需要persistence.xml;您需要做的就是指定要在此处搜索的基包。
如果您想使用持久性。xml,您有几个选项:
Hibernate自动扫描功能:
<persistence-unit name="unitName" transaction-type="RESOURCE_LOCAL">
<!-- This is required to be spec compliant, Hibernate however supports
auto-detection even in JSE.
<class>com.entity.User</class>
<class>com.entity.Address</class>
...
-->
<properties>
<!-- Scan for annotated classes and Hibernate mapping XML files -->
<property name="hibernate.archive.autodetection" value="class, hbm"/>
...
</properties>
</persistence-unit>
问题内容: 我目前使用Spring 3.1和Hibernate 4通过以下方式扫描DAO和服务的软件包:是否可以对标记的类执行相同的操作,而不使用属性和文件? 问题答案: 将扫描模型包中的所有内容。我使用cfg.xml来包含诸如show_sql和hb2ddl.auto之类的设置。
问题内容: 我有以下通常正常工作的代码: 对于我的许多实体类来说,这都是可行的。但是对于其中的两个它什么也不做,它不会引发任何异常,也不会删除该对象。来自hibernate的日志显示,hibernate执行了许多选择查询,但它甚至没有尝试执行删除。 我已经在这里和这里尝试了在其他类似问题中发现的建议,但是没有用(嗯,后者建议我不能使用,但是我只是在和之间加上了语句)。 我似乎找不到这两个类比其他类
我有以下通常运行良好的代码: 对于我的许多实体类,这很有效。但是,对于其中两个,它什么都不做,它不会引发任何异常,也不会删除对象。来自Hibernate的日志显示Hibernate执行了许多选择查询,但它甚至不会尝试执行删除。 我已经尝试了在这里和这里的其他类似问题中找到的建议,但无济于事(好吧,后者建议我不能使用,但我只是将语句括在和之间)。 我似乎找不到这两个班比其他班多(或少)什么。他们使用
我对spring boot相当陌生,正在尝试使用Java持久性API hibernate mySQL持久性层构建spring boot应用程序。但当我试图使用entityManager获取所有记录时。createNamedQuery(“从学生s中选择*”,学生.class)。getResultList()它给了我以下异常。 Java语言lang.IllegalArgumentException:未
问题内容: 我正在使用Spring + Hibernate+JPA,但遇到无法将实体持久保存到数据库的情况。我已经建立了一个带有@Transactional注释的服务类。它使用包含注入的EntityManager的DAO。当我在服务对象上调用函数时,我看到DAO正在进行大量的选择读取,但是由于我的DAO发出的合并和删除操作,没有更新/删除。当然,我的设置有问题,但是我看不到它。 persisten
问题内容: 我试图扫描JedisCluster中存储的特定密钥。 在这里,我得到了空值。但是群集节点中存储了一个值。 但是,如果我尝试扫描每个Jedis池,我将得到结果。 为什么JedisCluster扫描方法无法提供正确的结果?我该如何解决这个问题? 注意:我可以用来检查密钥的存在。但是我需要使用扫描,因为我可以对Jedis和JedisCluster使用相同的界面。 问题答案: 第1部分: 在您