Spring данных jpa не работает с автоматически настроенным entityManagerFactory - PullRequest
0 голосов
/ 16 ноября 2018

Я использую весеннюю загрузку и jpa data jpa в своем приложении.когда я использую autoconfigured entityManagerFactoryBean, предоставленный jpa, я получаю ошибку ниже вместе с генерируемым запросом.

  select
        simentity0_.simid as simid1_3_,
        simentity0_.service_number as service_number2_3_,
        simentity0_.sim_number as sim_number3_3_,
        simentity0_.sim_status as sim_status4_3_ 
    from
        sim simentity0_ 
    where
        simentity0_.sim_number=? 
        and simentity0_.service_number=?
2018-11-16 14:26:40.824  WARN 10784 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 904, SQLState: 42000
2018-11-16 14:26:40.824 ERROR 10784 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : ORA-00904: "SIMENTITY0_"."SERVICE_NUMBER": invalid identifier

Но когда я предоставляю явную конфигурацию для entityManagerFactoryBeanиспользуя приведенную ниже конфигурацию java. Работает нормально.

@Bean
public LocalContainerEntityManagerFactoryBean getEntityManager() {
        LocalContainerEntityManagerFactoryBean bean = new 

    LocalContainerEntityManagerFactoryBean();
            bean.setPackagesToScan("com.mypackage.entity");
            bean.setDataSource(getDataSource());
            bean.setJpaVendorAdapter(getJpaVendor());
            return bean;
        }

Ниже приведен запрос, который генерируется, когда он работает.

 select simentity0_.simID as simID1_3_,
    simentity0_.serviceNumber as serviceN2_3_, 
    simentity0_.simNumber as simNumbe3_3_, 
    simentity0_.simStatus as simStatu4_3_ 
   from SIM 
    simentity0_ 
   where 
    simentity0_.simNumber=? 
    and simentity0_.serviceNumber=?

Вот сущностьФайл свойств бина и приложения.

Application.properties

spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.jpa.show-sql=true
spring.datasource.username=nawnit.sen
spring.datasource.password=pass

SimEntity .java

@Entity
@Table(name = "SIM")
public class SimEntity {
    @Id
    private Integer simID;
    private Long serviceNumber;
    private Long simNumber;
    private String simStatus;

query.sql

create table SIM (
    simID integer primary key,
    serviceNumber integer not null,
    simNumber integer not null,
    simStatus varchar2(10) not null
);

См. _ в имени столбца в первом запросе. Я не понимаю, почему он приходит в запросе.Может быть потому, что я не предоставил packageToScan свойство в файле свойств в первом случае (где берется autoConfiguredBean).

1 Ответ

0 голосов
/ 16 ноября 2018

Причина в том, что Spring Boot автоконфигурация использует SpringPhysicalNamingStrategy , но значение по умолчанию Hibernate one равно PhysicalNamingStrategyStandardImpl

Вы можете указать стратегию именования, которую хотите использоватьчерез свойство, например spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl свойство

...