2016-09-14 91 views
1

我是JPA和Spring Boot的新手,嘗試編寫一個自定義查詢,該API在觸發API時僅返回表中的一列。但是我收到了一個錯誤。如果有人能指導我以正確的方式編寫這個自定義查詢,那將會很有幫助。Spring JPA:從表中查詢一列,但不包含where子句

// 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(); 

} 
+0

您是否期待結果列表? – Maroun

+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. 你必須把你的名字類from子句@Query("SELECT ti.testName FROM UserTestInstance ti")
  2. 使用蒙山數據庫@Query(value="SELECT ti.test_name FROM test_instance ti",nativeQuery=true)
0

我的真名本機查詢爲此目的使用JpaRepository

Controller類

@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 
相關問題