【问题标题】:How to configure Hibernate AnnotatedClasses in Spring Boot如何在 Spring Boot 中配置 Hibernate AnnotatedClasses
【发布时间】:2021-01-26 12:14:29
【问题描述】:

我目前正在将一个旧的 Spring 项目转移到 Spring boot。在旧项目中,我们在 xml 上下文中显式地初始化数据源和会话工厂。但是在迁移到 Spring Boot 之后,一切都是通过 Spring boot 和 application.properties 隐式发生的。

我的问题是,在没有明确创建/初始化数据源和sessionFactory 的情况下,如何将annotatedClasses 添加到hibernateSessionFactory?我可以通过application.properties 做吗?

这是之前的上下文的样子:

<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="annotatedClasses">
  <list>
    <value>com.example.myEntity</value>
  </list>
</property>

我们正在使用以下版本:

春季:5.1.15.RELEASE, 弹簧启动:2.1.14.RELEASE, 休眠:5.4.15.Final

快速说明:

所以整个项目已经通过适当的注释进行了迁移。问题只出现在我们正在创建查询的 Dao 中。错误是该查询中引用的实体未映射。

查询创建如下所示:

getSession().createQuery("from TemplateImpl t");

我得到的错误是:

org.hibernate.hql.internal.ast.QuerySyntaxException: TemplateImpl is not mapped.

Dao 用 Repository 和 Transactional 注释,而 entity (TemplateImpl) 用 Entity 注释。

我还需要显式地向 sessionFactory 添加 annotatedClasses 吗?如果不是,那为什么我会收到此错误?

【问题讨论】:

  • 使用@ImportResource 加载xml,而不是尝试转换所有内容。首先使用现有的 XML 文件获取一个工作应用程序,使用 @ImportResource 加载它们。然后开始将内容转移到基于 java 的配置和/或使用 Spring Boot 自动配置。再一次,婴儿步骤一次做 1 颗豆子。
  • 我已经过了那个阶段。我已经用新的更新更新了这个问题。可以看看吗?
  • 检查您的表是否正确映射到您的实体类。 javabeat.net/hibernate-querysyntaxexception/….
  • 查询使用的是实体的确切名称。正如您共享的链接中所述。
  • 如果您遵循最佳实践(即覆盖所有其他包的顶级包中的 @SpringBootApplication 注释类),则应选择您的实体。如果不是这种情况,您可能需要添加@EntityScan。此外,您不应该直接(最好)使用 Hibnernate,而是使用 EntityManager 并切换到 JPA。在 JPA 的当前状态下,您很少需要 Hibernate,如果确实需要,您可以简单地将 unwrap 转换为 Session。这也允许您利用 JPA 自动配置。

标签: java spring spring-boot hibernate


【解决方案1】:

使用Spring Boot 中的基于Java 的注解配置,数据访问自动管理:

application.propertie文件:

在这里您定义连接字符串和您想要的所有其他功能 在访问您的数据库时

@Repository接口:

有助于简化访问 通过提供原生 CRUD 函数的数据库

@Entity类:

一个代表你在内存中的表的类

这个link 应该可以帮到你。

【讨论】:

  • 我忘了在原始问题中提到一些东西。因此,整个项目已经完全按照您在答案中推荐的注释进行了迁移。问题只出现在我们正在创建查询的 Dao 中。错误是该查询中引用的实体未映射。 getSession().createQuery("来自 TemplateImpl t");我得到的错误是:org.hibernate.hql.internal.ast.QuerySyntaxException:TemplateImpl 未映射。 Dao 使用 Repository 和 Transactional 进行注释,而 entity (TemplateImpl) 使用 Entity 进行注释。
  • 我还需要显式地将annotatedClasses 添加到sessionFactory 中吗? PS:我也在用这些细节更新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-09
  • 2020-03-16
  • 2014-06-21
  • 2020-04-17
相关资源
最近更新 更多