Spring boot hibernate для автоматического сканирования объектов - PullRequest
0 голосов
/ 27 мая 2018

Я довольно новичок в весенней загрузке и пытаюсь создать весеннее загрузочное приложение с помощью Java Persistence API + hibernate + mySQL persistence layer.Но когда я пытаюсь получить все записи, используя, entityManager.createNamedQuery("SELECT * FROM Student s", Student.class).getResultList(), я получаю следующее исключение:

java.lang.IllegalArgumentException: для этого имени не определен запрос [SELECT * FROM Student s]в org.hibernate.internal.AbstractSharedSessionContract.buildQueryFromName (AbstractSharedSessionContract.java:771) ~ [hibernate-core-5.2.17.java: 869) ~ [hibernate-core-5.2.17.Final.jar: 5.2.17.Final] в org.hibernate.internal.AbstractSessionImpl.createNamedQuery (AbstractSessionImpl.java:23) ~ [hibernate-core-5.2.17.Final.jar: 5.2.17.Final] в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) ~ [na: 1.8.0_131] в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) [na:1.8.0_131] в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) ~ [na: 1.8.0_131] в java.lang.reflect.Method.invoke (Method.java:498)~ [na: 1.8.0_131] at org.springframework.orm.jpa.ExtendedEntityManagerCreator $ ExtendedEntityManagerInvocationHandler.invoke (ExtendedEntityManagerCreator.java:350) ~ [spring-orm-5.0.6.RELEASE.jEL: 5.0.6R)com.sun.proxy. $ Proxy87.createNamedQuery (Неизвестный источник) ~ [na: na] в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) ~ [na: 1.8.0_131] в sun.reflect.NativeMethodAccessorImpl.inmplMative (.java: 62) ~ [na: 1.8.0_131] в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) ~ [na: 1.8.0_131] в java.lang.reflect.Method.invoke (Method.java: 498) ~ [na: 1.8.0_131] в org.springframework.orm.jpa.SharedEntityManagerCreator $ SharedEntityManagerInvocationHandler.invoke (SharedEntityManagerCreator.java:304) ~ [spring-orm-5.0.6.RELEASE.j.RELEASE] на com.sun.proxy. $ Proxy87.createNamedQuery (неизвестный источник) ~ [na: na] на com.sys.sch.orm.dao.impl.StudentDaoImpl.findAll (StudentDaoImpl.java:30) ~ [school-система-ОРМ-1,0-SNAPSHOT.jar: на]

Я пытаюсь настроить этот проект без persistence.xml или hibernate.cfg.xml и пытаюсь использовать автозагрузку с весенней загрузкой.Я также добавил @EntityScan("com.sys.sch.orm.model"), как и большинство прочитанных мною чтений.

@SpringBootApplication
@EnableAutoConfiguration
@EnableWebMvc
@ComponentScan({"com.sys.sch"})
@EntityScan("com.sys.sch.orm.model")
public class Program {

public static void main(String[] args) throws Exception {
    SpringApplication.run(Program.class, args);
}

Entity:

@Entity(name = "student")
public class Student {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@Column(name = "name")
private String name;

@Column(name = "birth_date")
private Date birthDate;

@CreationTimestamp
private Date dateCreated;

@UpdateTimestamp
private Date dateUpdated;
// getters and setters
}

зависимости:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>2.0.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.15</version>
</dependency>
<dependency>
    <groupId>school-system</groupId>
    <artifactId>school-system-core</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.0.2.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    <version>2.0.2.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
    <version>2.0.2.RELEASE</version>
</dependency>

application.properties:

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/schoolsys?createDatabaseIfNotExist=true
spring.datasource.username=root spring.datasource.password=
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.max-idle=20
spring.datasource.tomcat.min-idle=15
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.properties.hibernate.id.new_generator_mappings=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.ddl-auto=update
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

Структура проекта

Если кто-нибудь может показать мне, что я здесь делаю неправильно, я буду очень благодарен.

1 Ответ

0 голосов
/ 27 мая 2018

Существует разница между createNamedQuery() и createQuery().

createNamedQuery() принимает имя предопределенного запроса:

@Entity(name = "student")
@NamedQuery(query = "select s from Student s", name = "findAllStudents")
public class Student {
    ...
}

На этот запрос может ссылаться егоимя:

Query query = entitymanager.createNamedQuery("findAllStudents");
List<Student> students = query.getResultList();

С другой стороны, createQuery() принимает оператор jpql

Query query = entityManager.createQuery("select s from Student s");

Или проще

Query query = entityManager.createQuery("from Student");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...