- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Spring/Hibernate 项目,其中的实体是使用 hbm 和注释定义的。
当我尝试部署项目时,收到以下错误消息:
Caused by: org.hibernate.MappingException: Following super classes referenced in extends not found: hibernate.examples.model.Task
at org.hibernate.cfg.Configuration.processExtendsQueue(Configuration.java:1768) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final]
at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1690) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final]
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1426) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final]
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:857) ~[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850) ~[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final]
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:425) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:849) ~[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final]
....................
我必须继续使用两者的原因是因为有些代码是遗留的,我目前无法触及它们。我们必须开始使用注释来创建任何新的实体。
这就是我将两种映射注册到配置中的方式:
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPackagesToScan("hibernate.examples.model", "models");
em.setMappingResources("Task.hbm.xml");
em.setMappingResources("HealthTask.hbm.xml");
final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(hibernateProperties());
return em;
}
setPackagesToScan
方法扫描所有由注释标记的实体,并且 setMappingResources
应该负责处理 hbm 文件。
当我注释掉 em.setMappingResources.....
时,项目就会毫无问题地部署。
此外,需要注意的奇怪部分是,当我将其作为独立应用程序运行时,即使用 public static void main(String[] args)
我在使用这两种类型时都没有任何问题映射。所有实体都已注册并创建模式。
这是我运行该项目的方式:
public class ConceptRunner {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(HibernateConfiguration.class);
ctx.refresh();
System.exit(0);
}
}
但是当我部署项目时,它无法注册 hbm 文件。
这是我的 hbm 文件:
任务.hbm.xml
<hibernate-mapping>
<class name="hibernate.examples.model.Task" table="TASKS" abstract="true">
<id name="id" type="java.lang.Long">
<column name="ID" precision="22" scale="0"/>
<generator class="identity"/>
</id>
<discriminator column="TYPE" type="string"/>
<property name="type" type="java.lang.String" insert="false" update="false">
<column name="TYPE" length="10"/>
</property>
<property name="name" type="java.lang.String">
<column name="NAME" length="50"/>
</property>
<property name="description" type="java.lang.String">
<column name="DESCRIPTION" length="250"/>
</property>
</class>
</hibernate-mapping>
HealthTask.hbm.xml
<hibernate-mapping>
<subclass name="hibernate.examples.model.HealthTask"
extends="hibernate.examples.model.Task" discriminator-value="HEALTH">
<property name="requestServed" type="java.lang.Long">
<column name="REQUEST_SERVED"/>
</property>
<property name="requestFailed" type="java.lang.Long">
<column name="REQUEST_FAILED"/>
</property>
<property name="totalRequest" type="java.lang.Long">
<column name="TOTAL_REQUEST"/>
</property>
</subclass>
</hibernate-mapping>
如果您还需要我提供任何其他信息,请告诉我。
最佳答案
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPackagesToScan("hibernate.examples.model", "models");
em.setMappingResources("Task.hbm.xml");
em.setMappingResources("HealthTask.hbm.xml");
final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(hibernateProperties());
return em;
}
由于 setMappingResources
是一个 setter,每次调用它都会替换当前的资源集。由于您在代码中调用它两次,因此仅保留最后一个(HealthTask.hbm.xml
和 Task.hbm.xml
将被忽略)。
如果你看一下setMappingResources
在 LocalContainerEntityManagerFactoryBean
中,您会注意到它采用 String...
作为参数(确切地说是 varargs 参数)。
因此,不要调用它两次,而是使用 2 个参数调用它一次。
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPackagesToScan("hibernate.examples.model", "models");
em.setMappingResources("Task.hbm.xml", "HealthTask.hbm.xml");
final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(hibernateProperties());
return em;
}
关于java - 当对实体使用注释和 hbm 混合时,Spring/Hibernate 无法初始化 EntityManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46064905/
我使用 hibernate 作为 ORM 工具,我面临一个问题, 我需要将全局临时表映射到 HBM。现在,问题在于键,我知道在 hbm 中必须有一些关键字段,但是我应该输入什么,因为任何列在任何时间点
Hibernate 的常用配置文件主要分为 2 种:核心配置文件(hibernate.cfg.xml)和映射文件(Xxx.hbm.xml),它们主要用于配置数据库连接、事务管理、Hibernate 本
在我的 MSSQL 服务器中,我有一个名为 AllFavourite 的 SQL View 。为了将数据加载到我的 DTO 类中,我的 hbm.xml 文件中有以下内容... 在我的代码中
我有以下三个类: public class Student { private Integer studentId; private StudentSchool studentScho
我正在从 NHibernate 映射创建我的表和索引。 例如,我按如下方式创建姓氏索引: 我想创建一个复杂的索引,以便例如 LastName 和 FirstName 作为一个索引生成。这在 NH
我在映射我们的 byte[] 时遇到问题 field 。我一直在寻找几种解决方案,但到目前为止都没有奏效。我得到的只是这个异常(exception): The length of the byte[]
我正在通过代码使用 NHibernate 映射,并以这种方式创建 session 工厂: var mapper = new ModelMapper(); map
我的 hibernate hbm xml 有一个属性映射为 我正在使
我在屏幕上显示位图时遇到问题。当我编译并运行不显示任何内容时,尝试逐步调试,发现下面的代码是问题所在。 HBITMAP hbm = (HBITMAP)LoadImage(hInstance,
我是 hibernte 新手。我正在尝试使用 hibernate 从 oracle 表中简单检索记录。 我的实体类名为pojo1,pojo1.hbm.xml如下: 我在运行包含所有
例如, 如果我想要f
我正在通过代码使用 NHibernate 映射,并以这种方式创建 session 工厂: var mapper = new ModelMapper(); map
我有一个有两个主键的表,我如何在 hbm 映射文件中映射相同的表。如何定义两个主键。 最佳答案 两个主键?您可能指的是复合主键。检查this here . 关于java - 如何在 hbm 中定义
我是 hibernate 新手,遇到了一个问题。我已经阅读了 hibernate 网站上的入门指南等所有内容,但仍然无法找到解决方案。 我有一堂这样的课: public class ResultTre
我在打开 hbm 文件时遇到这个奇怪的问题。我正在使用 hibernate3.jar。我还验证了类路径中只有一个 hibernate3.jar 并且它包含 hibernate 映射 dtd 文件。 我
你能否让 1 个表被映射到 2 个不同类的 2 个不同的 HBM 引用(它们是不相关的,基本类,没有继承)。 我知道由于重复,这可能是不好的做法,但它与代码维护有关。我试图避免删除其中一个类。 谢谢,
例如, 如果我想要f
我正在开发一个 Spring 框架和 hibernate 应用程序,其中包含一个企业 Web 应用程序的中央数据库,该应用程序具有每天约有 1000 位用户在线。 您可以假设有一个计费应用程序,任何人
我是 Hibernate 新手,正在尝试插入 ArrayList在数据库中使用 .hbm 映射文件。我不想使用任何注释。我搜索了如何插入 ArrayList并从 here 找到工作代码。 我期待一个包
我在谷歌上搜索了很多,并且遵循了很多关于它的教程,但我没有让它工作。我在表 Player 和 Type 之间有多对多关系。两个表都通过 typeperplayer 连接。在表中 typeperplay
我是一名优秀的程序员,十分优秀!