Spring JPA:从没有where子句的表中查询一列

时间:2016-09-14 19:32:35

标签: java spring-boot spring-data-jpa jpql

我是JPA和Spring Boot的新手,并尝试编写一个自定义查询,当触发API时,该查询只返回表中的一列。但是我这样做会出错。如果有人可以引导我以正确的方式编写此自定义查询,将会很有帮助。

// Controller class
@Autowired
private UserTestInstanceDao usertestdao;

List<String> usertestinst = usertestdao.tempQuery();

// DAO class

public interface UserTestInstanceDao extends CrudRepository<UserTestInstance, Long> {

@Query("SELECT ti.test_name FROM test_instance ti")
public List<String> tempQuery();

}

3 个答案:

答案 0 :(得分:2)

我认为您的查询应该如下所示(如果您遵循惯例):

@Query("SELECT ti.testName FROM UserTestInstance ti")

对于此查询,UserTestInstance应如下所示:

public class UserTestInstance {
    private String testName;

    <getters and setters>
}

这是因为您正在使用JPQL,您应该查询对象及其声明的变量。将Spring的数据作业转换为特定于数据库的数据库查询。

Spring Data文档供参考。

答案 1 :(得分:1)

没关系,但你有两个选择:

  1. 您必须将您的名称类放在from子句@Query("SELECT ti.testName FROM UserTestInstance ti")
  2. 使用具有数据库@Query(value="SELECT ti.test_name FROM test_instance ti",nativeQuery=true)
  3. 的真实名称的本机查询

答案 2 :(得分:0)

我为此目的使用了 JpaRepository

控制器类

@Autowired
private UserTestInstanceDao usertestdao;

//in method
List<String> usertestinst = usertestdao.tempQuery();

DAO课程:

public interface UserTestInstanceDao extends JpaRepository<UserTestInstance, Long> {

    @Query(value="SELECT test_name FROM ti", nativeQuery = true)

    public List<String> tempQuery();

}

这些在我的 application.properties中:

# DATASOURCE
spring.datasource.url=jdbc:mysql://localhost/test_instance 
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# JPA
spring.jpa.properties.hibernate.globally_quoted_identifiers=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.data.jpa.repositories.enabled=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect