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

使用JPA在Spring中自定义查询

微生翼
2023-03-14

我在这里创建了一个类似于教程的Web应用程序:https://spring.io/guides/tutorials/react-and-spring-data-rest/ .

我已经添加了后gresql数据库,一切正常。我有一个基本查询查找我的存储库中的By用户名(字符串名称),工作正常。我的问题是,由于某种原因我无法创建自定义查询,例如

"SELECTCURRENT_TIMESTAMP".

假设我做了一个测试,我只想得到这个语句的值。我说的不能是指我不知道怎么做:)

我的谷歌结果建议我把它添加到我的班级

@Autowired实体管理器实体管理器;

然后创建查询。但由于某种原因,entityManager从未初始化,始终返回null。这是正确的方式,我只是错过了什么?还尝试添加spring boot starter jdbc并使用JdbcTemplate,但也为空。

编辑

我的问题是对Spring的了解太少。

我上过这样的课,并尝试在那里使用Autowire。

public class Person {
@Autowire
MyRepo myRepo;
private String p;
public Person(String p) {
    this.p = p;
}

正如我后来所理解的,Spring没有选择这个。我在RestController中用Person per=new Person("string");调用了这个类。我的解决方案是在我的RestController类中自动连接MyRepo,我的Person连接器如下所示

public Person(String p, MyRepo myRepo) {
this.p = p;
this.myRepo = myRepo;
}

删除了Person类中的autowire。通过这种方式,我成功地在Person类中初始化了myRepo,并在那里使用它。这不是解决我问题的最好办法。

我的第二个问题。在我开始工作后,我试图将EntityManager自动连接到我的Person类。刚刚用EntityManager替换了MyRepo,它也被初始化了。现在的问题是我的下一个代码行整数i=(整数)em.createNativeQuery(选择1,Integer.class). getSingleResult();。这里我得到一个错误javax.persistence.PersistenceException:org.hibernate.MappingException:未知实体:java.lang.Integer.此语句的目的是对我的数据库进行一个简单的查询,以确定它是否响应。

共有2个答案

翟默
2023-03-14

最终的解决方案是:

Integer i = (Integer) em.createNativeQuery("select 1").getSingleResult();

刚刚从NatviveQuert中删除了Integer.class部分。我想,如果我想要它在那里,我应该为整数制作一个新bean。
总的来说,这不是Spring中的最佳实践,但它解决了我的问题。

杜霍英
2023-03-14

您不需要自动连接EntityManager,Spring会为您解决所有这些问题。

相反,您需要在存储库中定义一个新方法,并用@Query注释它。

例:

@Query(value = "select current_timestamp from #{#entityName} u")
String findTimestamp();

您可以在Spring文档中找到有关使用@Query的更多信息:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.at-query.

 类似资料:
  • 问题内容: 我正在使用Spring Data JPA进行项目。我在数据库中有一个表作为my_query。 我想创建一个将字符串作为参数的方法,然后将其作为数据库中的查询执行。 方法: 例如,当我通过 那么它应该在数据库级别运行该查询。 存储库类如下。 但是,它没有按我预期的那样工作。它给出以下错误。 还有什么其他方法可以实现这个目标。提前致谢 问题答案: 您可以参数化的唯一部分是在子句中使用的值。

  • 我正在用Spring Data JPA做一个项目。我在数据库中有一个表为my_query。 我想创建一个以字符串作为参数的方法,然后将其作为数据库中的查询执行。

  • 我是Spring Jpa和Hibernate的新手。我试图使用一个定制函数从Oracle数据库中获取数据。我可以定义一个实体及其相关的服务、实现和存储库。此外,我通过使用< code>registerFunction创建了一个新的定制Oracle方言,如下所示。 所以我有两个问题: 1)在我的Oracle数据库中,函数位于不同的模式下。我需要指定它的模式吗?如果是的话怎么做?还是hibernate

  • 我想从JSON列中获取值,并在spring JPA中返回自定义DTO。 表结构 列包含年龄,例如 我想获取具有、和的用户列表。由于数据量可能很大,我创建了一个自定义DTO 下面是一个同样的例子: 实体: 结构: 结构: 启动Spring启动应用程序 警告|上下文初始化期间遇到异常-取消刷新尝试:org。springframework。豆。工厂UnsatifiedPendencyException:

  • 我有一个整数参数。我需要编写一个定制的Spring JPA查询,其中等效的SQL是<(1,2)中的code>和x.propertyStatuid。 我在SpringDataJPA文档中看到关键字是“in”,如