当前位置: 首页 > 知识库问答 >
问题:

Hibernate无法加载具有复合id的请求类

鲜于河
2023-03-14

我在eclipse插件中使用Hibernate代码生成工具为world数据库生成pojo类、hbm文件和DAO类。这就产生了城市。爪哇,国家。java,Countrylanguage。java和CountrylanguageId。java,但只有三个hbm文件。hbm。xml国家/地区。hbm。xml和Countrylanguage。hbm。xml。

我已经通过addClass在配置中添加了java类文件

    protected SessionFactory getSessionFactory() {
    Configuration config = new Configuration()
            .configure("hibernate.cfg.xml")
            .addClass(Country.class)
            .addClass(City.class)
            .addClass(Countrylanguage.class);

但是在尝试使用创建服务注册表时

StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();

它会引发以下错误-

Exception in thread "main" org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.component.PojoComponentTuplizer]
at org.hibernate.tuple.component.ComponentTuplizerFactory.constructTuplizer(ComponentTuplizerFactory.java:107)
at org.hibernate.tuple.component.ComponentTuplizerFactory.constructDefaultTuplizer(ComponentTuplizerFactory.java:128)
at org.hibernate.tuple.component.ComponentMetamodel.<init>(ComponentMetamodel.java:77)
at org.hibernate.tuple.component.ComponentMetamodel.<init>(ComponentMetamodel.java:52)
at org.hibernate.mapping.Component.getType(Component.java:227)
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:455)
at org.hibernate.mapping.RootClass.validate(RootClass.java:268)
at org.hibernate.boot.internal.MetadataImpl.validate(MetadataImpl.java:343)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:461)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708)
at dao.DefaultService.getSessionFactory(DefaultService.java:24)
at dao.DefaultService.<init>(DefaultService.java:14)
at dao.CityService.<init>(CityService.java:21)
at App.main(App.java:6)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.hibernate.tuple.component.ComponentTuplizerFactory.constructTuplizer(ComponentTuplizerFactory.java:104)
... 13 more
Caused by: org.hibernate.MappingException: component class not found: CountrylanguageId
at org.hibernate.mapping.Component.getComponentClass(Component.java:177)
at org.hibernate.tuple.component.PojoComponentTuplizer.setComponentClass(PojoComponentTuplizer.java:147)
at org.hibernate.tuple.component.AbstractComponentTuplizer.<init>(AbstractComponentTuplizer.java:37)
at org.hibernate.tuple.component.PojoComponentTuplizer.<init>(PojoComponentTuplizer.java:41)
... 18 more
Caused by: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [CountrylanguageId]
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:133)
at org.hibernate.mapping.Component.getComponentClass(Component.java:174)
... 21 more
Caused by: java.lang.ClassNotFoundException: Could not load requested class : CountrylanguageId
at org.hibernate.boot.registry.classloading.internal.AggregatedClassLoader.findClass(AggregatedClassLoader.java:210)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:130)
... 22 more

我试着添加

.addClass(CountrylanguageId.class)

但这引发了另一个错误,即相应的hbm文件Countrylanguage。hbm。缺少xml。

基于复合id关系生成的类是否需要hbm文件?为什么即使在hibernate配置实例中指定了类,也会出现这种错误?

共有1个答案

房时铭
2023-03-14

解决了问题。在生成pojo类时,我使用hibernate工具将其指定为默认包,但在子文件夹src/main/java/entity下生成它们。

hbm文件已更新为类=“…”引用和名称=“…”引用为实体。Countrylanguage,之后它运行良好。

还验证了使用hibernate生成工具,将包配置为实体,将文件夹配置为默认src/main/java,可以按预期正确输出hbm文件。

将此问题标记为已回答并关闭它。

 类似资料:
  • 我安装了一个与PostgreSQL一起工作的JBoss...我正在尝试改用MySQL。 我下载了mysql-connector-java-5.1.36-bin.jar并将其放入jboss_home/module/com/mysql/main,创建了module.xml并更改了standalone.xml。 但是,如果我尝试启动服务器,我就得到了下面的stacktrace: 有人能帮忙吗? 我的St

  • 我在使用聚合框架从MongoDB读取文档时遇到了问题:我的结果中总是得到空ID。这只发生在具有复合ID的文档中。我尝试了各种版本的spring-data-mongob(1.10.12, 2.0.7),结果相同。 实体定义类 测试代码 输出 调试到以下方法MappingMongoConverter。read(final mongopersistenentity entity、final Docume

  • 我试图发送一个POST请求到REST服务使用REST模板,但得到下面的错误 RestClientException:无法写入请求:找不到适合请求类型[xxx.query.XBrainQueryRequest]和内容类型[application/json]的HttpMessageConverter。 我的XBrainQueryRequest课程如下 有人能解释我为什么会出错以及如何解决它吗?我对这些

  • 我有3分贝实体。产品-id,名称。/产品订单-id,日期。/Orders OrderDetail-OrderID,productId,Price。订单/{orderId}/orderDetails 谢了!

  • 问题内容: 我在我的班级结构上定义了一个复合ID,如下所示。不幸的是,我总是收到一个hibernate错误,抱怨找不到的“ part2”: “在实体MoreClass中找不到@IdClass的属性:第2部分” 有人可以帮我解决问题吗?(或者至少在一个有用的jpa / hibernate文档上指向我?) 问题答案: 居然撞到了。 如: 确实可行,我认为这是一个错误。参见https://hiberna

  • 在尝试检查按钮时,我尝试使用类进行检查,但在运行测试时它会抛出一个错误: “OpenQA.Selenium”类型的异常。WebDriver中发生了InvalidSelectorException。dll,但未在用户代码中处理 附加信息:无效选择器:不允许复合类名 下面是我正在检查元素的类: