我正在创建一个多模块maven项目,其中模块ModuleA和ModuleB位于父项目之下。
这些模块使用自己的Hibernate映射和自己的资源文件夹。每个模块独立于其他模块保存其对象。现在,当我尝试在模块A中实例化模块B中的一个类时,我可以访问所有需要的方法,但是当我执行应用程序时,Hibernate会抛出以下错误:
Exception in thread "main" org.hibernate.MappingException: Unknown entity: org.example.ModuleB.Person
at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:1096)
at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1443)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:116)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209)
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194)
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:715)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:707)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:702)
我可以另外将ModuleB中类的映射添加到模块A的Hibernate配置文件中。然后它就可以工作了。但这不是它应该如何工作,因为每个模块都应该是独立的。理论上它可以存储在完全不同的RDBMS中。
最初,我只使用了一个模块,它分裂,并希望有更多的角度。我执行了mvn clean,从头开始编译所有的东西。
此外,来自模块A的pom.xml依赖于模块b。
<dependency>
<groupId>org.example</groupId>
<artifactId>ModuleB</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
根据@Skizzo的建议,我只是重命名了每个模块的配置文件。最初,每个模块都包含一个名为Hibernate.cfg.xml的Hibernate
配置文件。我在两个模块中重命名了这些配置文件。模块 A 的配置文件现在称为Hibernate模块 A.cfg.xml
模块 B 的配置文件现在称为Hibernate模块 B.cfg.xml
每个模块还包含一个用于初始化会话工厂的HibernateUtil.java类。我还为每个模块重命名了HibernateUtil类。ModuleA的Util类现在称为HibernateUtilModuleA
,而ModuleB的Util类称为HibernateUtilModuleB
。现在两种配置之间没有混淆,Hibernate现在知道为每个模块选择哪个配置。
然后,我改编了两个HibernateUtil 类来加载各个配置文件,如下所示:
Hibernate Util模块A:
configuration.configure("hibernate.moduleA.cfg.xml");
HibernateUtilModuleB:
configuration.configure("hibernate.moduleB.cfg.xml");
ModuleA的HibernateUtil类现在大致如下所示:
/**
* Hibernate session management
*/
public class HibernateUtilModuleA {
private static SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;
static {
try {
Configuration configuration = new Configuration();
configuration.configure("hibernate.ModuleA.cfg.xml");
serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (HibernateException he) {
System.err.println("Error creating Session: " + he);
throw new ExceptionInInitializerError(he);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
我有同样的问题,我用复合持久性单元解决了,但在我的情况下,我使用的是Eclipse链接,如Jpa实现复合持久性单元。我在这个链接上找到了一些关于Hibernate的信息,我认为解决问题的正确方法是这样。
我正在使用Hibernate和JPA注释来映射我的类。当hibernate尝试映射这个类时,我遇到了一个问题 我的Social alStat类是: 我得到了这个错误: 我猜发生这种情况是因为我试图映射到一个基本类,但@ElementCollection注释不应该解决这个问题吗? 我的item类如下所示:
我有2个数据库表。First在其中有交易。每个交易都有一个ID。这个ID也在我的第二个表中找到。第二个表包含收费,但我的第一个表没有有关收费的信息。现在我必须通过冬眠映射获得连接到1个交易的所有费用,但我不想有它在两个方向。 贸易类:
我刚开始冬眠。写一个复合字体。当我运行代码时,我得到一个错误。所有物 映射的列数错误:请帮助我缺少什么? 我的组合类型如下 我的域类股票有五个属性。(股票ID、股票代码、股票名称、状态、股票描述) 我需要声明字段股票描述为复合字段类型。 } 当我尝试执行股票插入时。我得到的错误错误创建bean与名称 在类路径资源[spring/config/./database/Hibernate.xml]中定义
我试图在类别和发布类(OneToMany)之间建立关系,我需要删除所有属于特定类别的发布。我不知道我是否遗漏了一些注释,但这是我在执行查询时的错误: org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常org.hibernate.exception.ConstraintViolationException:无法执行更新查询o
我有一个产品数据库。我已经创建了一个简单的Hibernate项目来从数据库中检索所有的产品。但是,我在编译代码时出现了以下异常: 令人惊讶的是,将prodcuts添加到数据库中可以正常工作。
我正在使用与共享主键一对一映射。