Отображение JPA: «QuerySyntaxException: FooBar не отображается…» - PullRequest
0 голосов
/ 10 ноября 2018

Я получаю исключение FooBar is not mapped, хотя я разместил все необходимые аннотации:

Аннотация сущности в классе модели:

модель / FooBar.java *

@Data
@Entity
@Table(name = "ORDERS")
public class FooBar {}

Репозиторий, PersistenceContext и Transactioinal в DAO. Кроме того, я ссылался на него по имени класса "FooBar", правильно

дб / FooBarDao.java

@Repository
public class OrderDAO {
    @PersistenceContext
    private EntityManager em;

    @Transactional
    public List<FooBar> getFooBars() {
        return em.createQuery(
                "select fb from FooBar fb",
                FooBar.class
        ).getResultList();
    }
}

Вот конфигурация, чтобы все это заработало:

конф / DbConfig.java

@EnableTransactionManagement
@Configuration
@ComponentScan(basePackages = {"project.db"})
public class DbConfig {

    @Autowired
    public Environment env;

    @Bean
    public DataSource dataSource() {
        System.out.println("Configuring database!!!!!!!!");
        DriverManagerDataSource ds = new DriverManagerDataSource();
        ds.setDriverClassName("org.hsqldb.jdbcDriver");
        ds.setUrl("jdbc:hsqldb:mem:myjdbc");

        new JdbcTemplate(ds)
                .update(FileUtil.readFile2("./src/main/java/project/db/sql/initialize.sql"));

        return ds;
    }


    @Bean
    public PlatformTransactionManager transactionManager(
            EntityManagerFactory entityManagerFactory) {

        return new JpaTransactionManager(entityManagerFactory);
    }

    @Bean
    public EntityManagerFactory entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
        factory.setPersistenceProviderClass(HibernatePersistenceProvider.class);
        factory.setPackagesToScan("model");
        factory.setDataSource(dataSource());
        factory.setJpaProperties(additionalProperties());
        factory.afterPropertiesSet();

        return factory.getObject();
    }

    private Properties additionalProperties() {
        Properties properties = new Properties();
        properties.setProperty("hibernate.hbm2ddl.auto", "validate");
        properties.setProperty("hibernate.dialect",
                "org.hibernate.dialect.HSQLDialect");
        properties.setProperty("hibernate.show_sql", "true");
        properties.setProperty("hibernate.format_sql", "true");

        return properties;
    }

}

1 Ответ

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

Он не находит отображение, хотя я правильно установил аннотации и правильно сослался на класс. Таким образом, проблема, скорее всего, связана со сканированием для класса модели.

Структура моего проекта /src/main/java/project/ ...

Итак, сканирование на model:

factory.setPackagesToScan("model");

Не найдет никаких бобов. Вместо этого мне нужно сделать

factory.setPackagesToScan("project.model");

Что решает проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...