JPA,spring-boot,使用旧的未注释类配置实体管理器

马托波

我有一个使用最新技术的全新 Spring-Boot 项目,只有一个配置文件 application.yml,否则我通过注释配置所有。

我只是依赖于一些旧的未注释的实体类,当我启动项目时它崩溃了,因为:

Caused by: org.hibernate.boot.MappingException: Association [old.entity1.SomeOldEntity] references an unmapped entity [old.entity1.SomeOldEntity] : origin(old/entity1/SomeOldEntity.xml)

这是 JPA 配置类:

@Configuration
@EnableJpaRepositories(basePackages = "actual.repositories", entityManagerFactoryRef = "entityManagerFactory", transactionManagerRef = "transactionManager")
@EnableTransactionManagement
public class JpaConfiguration {

    @Autowired
    private Environment environment;

    @Value("${my.maxPoolSize:10}")
    private int maxPoolSize;

    /*
     * Populate SpringBoot DataSourceProperties object directly from application.yml based on prefix.Thanks to .yml, Hierachical data is mapped out of the box
     * with matching-name properties of DataSourceProperties object].
     */
    @Bean
    @Primary
    @ConfigurationProperties(prefix = "datasource.myApp")
    public DataSourceProperties dataSourceProperties() {
        return new DataSourceProperties();
    }

    /*
     * Configure HikariCP pooled DataSource.
     */
    @Bean
    public DataSource dataSource() {
        DataSourceProperties dataSourceProperties = dataSourceProperties();
        HikariDataSource dataSource = (HikariDataSource) DataSourceBuilder.create(dataSourceProperties.getClassLoader())
                .driverClassName(dataSourceProperties.getDriverClassName()).url(dataSourceProperties.getUrl()).username(dataSourceProperties.getUsername())
                .password(dataSourceProperties.getPassword()).type(HikariDataSource.class).build();
        dataSource.setMaximumPoolSize(maxPoolSize);
        return dataSource;
    }

    /*
     * Entity Manager Factory setup.
     */
    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws NamingException {
        LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
        factoryBean.setDataSource(dataSource());
        factoryBean.setPackagesToScan(
                new String[] { "some.new.model", "old.entity1", "old.entity2" });
        factoryBean.setJpaVendorAdapter(jpaVendorAdapter());
        factoryBean.setJpaProperties(jpaProperties());
        return factoryBean;
    }

    /*
     * Provider specific adapter.
     */
    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
        return hibernateJpaVendorAdapter;
    }

    /*
     * Here you can specify any provider specific properties.
     */
    private Properties jpaProperties() {
        Properties properties = new Properties();

        // Datasource option
        String dialect = environment.getRequiredProperty("my.dialect");
        String method = environment.getRequiredProperty("my.method");
        String show_sql = environment.getRequiredProperty("my.show_sql");
        String format_sql = environment.getRequiredProperty("my.format_sql");
        String defaultSchema = environment.getRequiredProperty("my.schema");

        // Set options
        properties.put("hibernate.dialect", dialect);
        properties.put("hibernate.hbm2ddl.auto", method);
        properties.put("hibernate.show_sql", show_sql);
        properties.put("hibernate.format_sql", format_sql);
        if (StringUtils.isNotEmpty(defaultSchema)) {
            properties.put("hibernate.default_schema", defaultSchema);
        }
        return properties;
    }

    @Bean
    @Autowired
    public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
        JpaTransactionManager txManager = new JpaTransactionManager();
        txManager.setEntityManagerFactory(emf);
        return txManager;
    }

}

在这里编辑 22.06 xml 映射 SomeOldEntity:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="old.entity1">

    <class name="SomeOldEntity" table="entity1" lazy="false">

        <id name="id" column="ID" type="long" access="field">
            <generator class="assigned" />
        </id>

        <property name="moreId" column="MORE_ID" type="long" access="field" />

        <property name="aPrefix" column="A_PREFIX" type="java.lang.String" access="field" />
        <property name="aKey" column="A_KEY" type="java.lang.String" access="field" />

        <property name="active" column="IS_ACTIVE" type="boolean" access="field" />

        <one-to-one name="SomeMoreEntity" access="field" fetch="join" />
        <one-to-one name="another1OldEntity" property-ref="someOtherId" access="field" fetch="join" />
        <one-to-one name="another2OldEntity" property-ref="someOtherId" access="field" fetch="join" />
        <one-to-one name="another3OldEntity" property-ref="someOtherId" access="field" fetch="join" />

         <list name="impressumList" access="field" lazy="true" fetch="select">
            <key column="FK_SOMEID" not-null="true" />
            <list-index column="INDEX_ORDER" />
            <one-to-many class="some.other.entity.outside.package.SomeEntity" />
        </list>

    </class>

</hibernate-mapping>
马托波

好的,我想我找到了解决方案,旧的未带注释的类总是将类映射到数据库实体的 xml,比我像这样传递 xml 好:

// Old Not Annotated class must be passed as xml to MappingResource
String Entity1 = " old.Entity1.xml";
factoryBean.setMappingResources(Entity1);

取而代之的是:

// Annotated classes can be passed as entities throught setPackagesToScan
String Entity1 = "old.Entity1";
factoryBean.setPackagesToScan(new String[] { Entity1 });

有用!!!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spring MVC,用于模块访问的休眠实体管理器配置

来自分类Dev

在Hibernate的EmptyInterceptor中注入JPA的实体管理器

来自分类Dev

如何使用XML配置Spring Data JPA

来自分类Dev

如何在自定义实现中访问配置了Spring Data的实体管理器(工厂)

来自分类Dev

jar文件中的Spring JPA Autoscan实体

来自分类Dev

何时使用Spring JPA(休眠)实体管理器将连接返回到连接池?

来自分类Dev

spring-boot:自动配置事务管理器

来自分类Dev

如何使用Spring Boot和Spring数据访问实体管理器

来自分类Dev

Spring JPA实体和龙目岛

来自分类Dev

Spring Data JPA @Query注释,nativeQuery = true,

来自分类Dev

没有Spring数据的Spring Boot JPA

来自分类Dev

Spring Data JPA。对子实体的分页

来自分类Dev

Quarkus依赖注入到JPA实体管理器的问题

来自分类Dev

Spring MVC,用于模块访问的休眠实体管理器配置

来自分类Dev

在Hibernate的EmptyInterceptor中注入JPA的实体管理器

来自分类Dev

在春季应用程序中使用jpa实体管理器将blob导入mysql

来自分类Dev

Entitymanager是null的Spring JPA配置

来自分类Dev

Spring JPA DAO中的事务管理器

来自分类Dev

事务实体管理器不可用Spring / JPA / Hibernate-Pluralsight

来自分类Dev

Spring Boot使用JPA SQL和Pageable

来自分类Dev

在Spring Boot中未调用JPA实体上的@PostConstruct

来自分类Dev

使用 Spring JPA 持久实体管理器时如何处理角色交换?

来自分类Dev

未调用 Spring JPA 审计

来自分类Dev

如何在没有实体管理器的情况下使用 JPA setMaxResults() (LIMIT 20)?

来自分类Dev

Spring JPA 使用“(? in (.))”生成查询

来自分类Dev

Spring Boot 将自动配置 JPA 事务管理器

来自分类Dev

在 Spring JPA 中使用 Spring Data JPA 的问题

来自分类Dev

Spring Boot jpa 通过实体管理器访问辅助数据源

来自分类Dev

如何使用 Spring Boot 配置 JPA + HIBERNATE

Related 相关文章

  1. 1

    Spring MVC,用于模块访问的休眠实体管理器配置

  2. 2

    在Hibernate的EmptyInterceptor中注入JPA的实体管理器

  3. 3

    如何使用XML配置Spring Data JPA

  4. 4

    如何在自定义实现中访问配置了Spring Data的实体管理器(工厂)

  5. 5

    jar文件中的Spring JPA Autoscan实体

  6. 6

    何时使用Spring JPA(休眠)实体管理器将连接返回到连接池?

  7. 7

    spring-boot:自动配置事务管理器

  8. 8

    如何使用Spring Boot和Spring数据访问实体管理器

  9. 9

    Spring JPA实体和龙目岛

  10. 10

    Spring Data JPA @Query注释,nativeQuery = true,

  11. 11

    没有Spring数据的Spring Boot JPA

  12. 12

    Spring Data JPA。对子实体的分页

  13. 13

    Quarkus依赖注入到JPA实体管理器的问题

  14. 14

    Spring MVC,用于模块访问的休眠实体管理器配置

  15. 15

    在Hibernate的EmptyInterceptor中注入JPA的实体管理器

  16. 16

    在春季应用程序中使用jpa实体管理器将blob导入mysql

  17. 17

    Entitymanager是null的Spring JPA配置

  18. 18

    Spring JPA DAO中的事务管理器

  19. 19

    事务实体管理器不可用Spring / JPA / Hibernate-Pluralsight

  20. 20

    Spring Boot使用JPA SQL和Pageable

  21. 21

    在Spring Boot中未调用JPA实体上的@PostConstruct

  22. 22

    使用 Spring JPA 持久实体管理器时如何处理角色交换?

  23. 23

    未调用 Spring JPA 审计

  24. 24

    如何在没有实体管理器的情况下使用 JPA setMaxResults() (LIMIT 20)?

  25. 25

    Spring JPA 使用“(? in (.))”生成查询

  26. 26

    Spring Boot 将自动配置 JPA 事务管理器

  27. 27

    在 Spring JPA 中使用 Spring Data JPA 的问题

  28. 28

    Spring Boot jpa 通过实体管理器访问辅助数据源

  29. 29

    如何使用 Spring Boot 配置 JPA + HIBERNATE

热门标签

归档