2016-09-14 2 views
1

Я новичок в JPA и Spring Boot и пытается написать настраиваемый запрос, который возвращает только один столбец из таблицы при запуске API. Но я получаю сообщение об ошибке. Было бы полезно, если бы кто-нибудь мог привести меня к правильному способу написания этого пользовательского запроса.Spring JPA: запросить один столбец из таблицы без использования условия

// 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's Data для перевода на ваш DBB-запрос конкретной базы данных.

Spring Data документация для справки.

1

Это нормально, но у вас есть два варианта:

  1. Вы должны поместить свой класс имени в ЕКЕ @Query("SELECT ti.testName FROM UserTestInstance ti")
  2. Используй родной запрос ти реального имени базы данных @Query(value="SELECT ti.test_name FROM test_instance ti",nativeQuery=true)
0

I б/у 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 
Смежные вопросы