当前位置: 首页 > 知识库问答 >
问题:

Spring启动Hibernate自动扫描实体

姚建树
2023-03-14

我对spring boot相当陌生,正在尝试使用Java持久性API hibernate mySQL持久性层构建spring boot应用程序。但当我试图使用entityManager获取所有记录时。createNamedQuery(“从学生s中选择*”,学生.class)。getResultList()它给了我以下异常。

Java语言lang.IllegalArgumentException:未在组织中为该名称[从学生s中选择*]定义查询。冬眠内部的AbstractSharedSessionContract。buildQueryFromName(AbstractSharedSessionContract.java:771)~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]位于org。冬眠内部的AbstractSharedSessionContract。在org上创建namedquery(AbstractSharedSessionContract.java:869)~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]。冬眠内部的AbstractSessionImpl。在sun上创建NamedQuery(AbstractSessionImpl.java:23)~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]。反映NativeMethodAccessorImpl。在sun上调用0(本机方法)~[na:1.8.0\u 131]。反映NativeMethodAccessorImpl。在sun上调用(NativeMethodAccessorImpl.java:62)~[na:1.8.0\u 131]。反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:43)~[na:1.8.0\u 131]。lang.reflect。方法在org上调用(Method.java:498)~[na:1.8.0\u 131]。springframework。orm。jpa。ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler。在com上调用(ExtendedEntityManagerCreator.java:350)~[spring-orm-5.0.6.RELEASE.jar:5.0.6.RELEASE]。太阳代理$Proxy87.createNamedQuery(未知源)~[na:na]位于sun。反映NativeMethodAccessorImpl。在sun上调用0(本机方法)~[na:1.8.0\u 131]。反映NativeMethodAccessorImpl。在sun上调用(NativeMethodAccessorImpl.java:62)~[na:1.8.0\u 131]。反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:43)~[na:1.8.0\u 131]。lang.reflect。方法在org上调用(Method.java:498)~[na:1.8.0\u 131]。springframework。orm。jpa。SharedIdentityManager创建者$SharedIdentityManager职业处理程序。在com上调用(SharedEntityManagerCreator.java:304)~(spring-orm-5.0.6.RELEASE.jar:5.0.6.RELEASE)。太阳代理$Proxy87.createNamedQuery(未知源)~[na:na]位于com。系统。附件。orm。道。实施。学生daoimpl。findAll(StudentDaoImpl.java:30)~[school-system-orm-1.0-SNAPSHOT.jar:na]

我正在尝试在没有持久性的情况下配置此项目。xml或Hibernate。cfg公司。并尝试使用spring boot自动配置。我还添加了EntityScan(“com.sys.sch.orm.model”),就像我所做的大多数阅读一样。

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

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

实体:

@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个答案

柯伟志
2023-03-14

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");
 类似资料:
  • 我正在编写一个新的SpringBoot项目,其中我的根包名是“com.example”。在我的gradle配置中,我添加了一个第三方库的依赖项,它的根包名为“org.base”。现在,这个库中有带有@Component注释的类,我想在代码中使用@Autowired 在我的配置类中,我也扫描第三方库的基本包。 当我运行应用程序时,spring无法从这个库中找到/创建bean,我得到了一个bean n

  • 您可以通过Burp 控制台(Burp Dashboard)上的新的扫描(New scan)按钮或是 Burp 中出现的菜单中的Scan选项来启动扫描。利用这些方法可打开扫描启动窗口,然后您可以使用它配置扫描中的各种详细参数。 扫描细节 扫描启动界面的详细的扫描信息(Scan details)部分允许您选择扫描类型,配置要扫描的内容等等信息。 扫描类型 您可以选择以下扫描类型: 抓取并审计(Craw

  • 本文向大家介绍详解spring自动扫描包,包括了详解spring自动扫描包的使用技巧和注意事项,需要的朋友参考一下 配置文件 前面的例子我们都是使用XML的bean定义来配置组件。在一个稍大的项目中,通常会有上百个组件,如果这些组件采用XML的bean定义来配置,显然会增加配置文件的体积,查找及维护起来也不太方便。 Spring2.5为我们引入了组件自动扫描机制,它可以在类路径底下寻找标注了@Co

  • 问题内容: 我的Maven依赖有什么问题。当我包含JPA时,我会列出pf例外 这是我的Maven依赖项 我的例外 和我的源代码 因此,我没有任何想法(不幸的是,没有示例)如何运行Spring boot和hibernate状态。 问题答案: 您是否为数据源设置了或?这是一个例子: 有关可以在何处放置配置文件以及如何配置应用程序以处理任何目录中的属性文件的说明,请参阅此链接以获取更多信息。

  • 本文向大家介绍Spring组件自动扫描详解及实例代码,包括了Spring组件自动扫描详解及实例代码的使用技巧和注意事项,需要的朋友参考一下 Spring组件自动扫描详解及实例代码 问题描述 一个系统往往有成千上万的组件,如果需要手动将所有组件都纳入spring容器中管理,是一个浩大的工程。 解决方案 Spring 提供组件扫描(component scanning)功能。它能从classpath里

  • 简介 几乎每个渗透测试项目都需要遵循严格的日程,多数由客户的需求或开发交谈日期决定。对于渗透测试者,拥有一种工具,它可以在很短的时间内执行单个应用上的多个测试,来尽可能在排期内识别最多漏洞很有帮助。自动化漏洞扫描器就是完成这种任务的工具,它们也用于发现替代的利用,或者确保渗透测试中不会遗漏了明显的事情。 Kali 包含一些针对 Web 应用或特定 Web 漏洞的漏洞扫描器。这一章中,我们会涉及到一