java - Spring 启动: JPA query (JPQL) do not work but works when change to native query

标签 java spring hibernate jpa

我是 Spring-boot 的新手。我创建了一个简单的 JPA 应用程序,它使用 webH2 以及 JPA 依赖项。我想要使​​用 h2 嵌入数据库并使用 JPA 进行连接并提出一些请求。

我在 schema.sql 中创建了本地表并放置了以下代码:

drop TABLE  if EXISTS  stock;
CREATE TABLE stock(stockId INT ,companyName VARCHAR(20),price DECIMAL (10,2)
);

INSERT INTO stock VALUES (1,'apple',345.01);
INSERT INTO stock VALUES (2,'google',8999.00);
INSERT INTO stock VALUES (3,'kashky',56.60);

我还像这样创建了股票:

@Entity
public class Stock {

    @Id
    private int stockId;

    private String companyName;

    private double price;

... with all setter and getters

}

这是我的application.properties

spring.jpa.hibernate.ddl-auto=none
server.port=9090

Java 持久性查询语言 (JPQL) 不起作用,但当我更改为 native 查询时,它工作正常。

这段代码应该返回我的所有记录,但不起作用:

@SpringBootApplication
@RestController
public class SpringDataTestApplication {

    @Autowired
    private EntityManager em;

    @RequestMapping("/stocks")
    public List<Stock> stocks(){
        return em.createQuery("select s from Stock s").getResultList();
    }

如果我将查询更改为 native 模式,它就可以工作:

@RequestMapping("/stocks")
public List<Stock> stocks(){
    return em.createNativeQuery("select * from Stock").getResultList();
}

这是错误:

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Wed Jan 25 12:51:38 IRST 2017
There was an unexpected error (type=Internal Server Error, status=500).
org.hibernate.exception.SQLGrammarException: could not prepare statement

为什么会发生这种情况?我认为我在 JPA 方面遇到了一些问题,因为后来我什至无法使用我在代码中没有提到的 StockRepository,但我认为所有这些都是链接在一起收集的。

最佳答案

我猜您需要在 application.properties 文件中添加方言信息,例如对于 hibernate :

<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>

我猜 spring 有它自己的旋钮来完成这项任务。了解了方言,您的程序就知道要创建的 SQL 的“风格”。原生 SQL 可以工作,因为无需进行任何转换。

关于java - Spring 启动: JPA query (JPQL) do not work but works when change to native query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41847809/

相关文章:

mysql - 将查询转换为 hibernate 条件查询

java - 从持久性中排除@Entity

Java泛型根据值返回枚举

java - 预期位置参数计数 : 2, 实际参数:

java - Thymeleaf 添加带有消息资源值的自定义数据属性

Spring Security,修改密码后绕过登录页面

java - 拥有方与非拥有方在 hibernate 中及其在元素映射引用中的用法?

java - 在nestedscrollview中的recyclerview内的recyclerview的notifyDataChanged上,外部recyclerview滚动到顶部

java - 如何使用 Remember The Milk API 在 Java 中获取 URL?

java - Spring @Configuration 和 <context :component-scan/>