У меня есть три объекта, и один репозиторий расширяет CrudRepository, и я хочу сделать следующий запрос, но я не могу.У меня есть синтаксическая ошибка в или около верхнего.Я думаю, что проблема заключается в использовании нескольких таблиц в запросе и / или я не использую какой-либо тег или объявление в объектах.
import java.util.List;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import com.companyname.springapp.business.entities.TableA;
public interface TableARepository extends CrudRepository<TableA, Integer>{
@Query(value = "SELECT DISTINCT a.*"
+"FROM TableB AS b, TableA_TableB AS ab, TableA AS a"
+"WHERE upper(b.nick_name) like upper(concat('%',:name,'%'))"
+"AND b.nick_name_id=ab.nick_name_id"
+"AND ab.id=a.id",
nativeQuery = true)
List<tableA> test(
@Param("name") String name);
Мои объекты:
TableA
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import com.companyname.springapp.web.Views;
import com.fasterxml.jackson.annotation.JsonView;
@Entity
@Table(name="TableA")
public class TableA{
@Id
@JsonView(Views.Public.class)
private Integer id;
//more columns, constructs and getters and setters
TableB
//... imports
@Entity
@Table(name="TableB")
public class TableB{
@Id
@JsonView(Views.Public.class)
private Integer nick_name_id;
@JsonView(Views.Public.class)
private String nick_name;
//more columns, constructs and getters and setters
TableA_TableB
//... imports
@Entity
@Table(name="TableA_TableB")
public class TableA_TableB{
@Id
@JsonView(Views.Public.class)
private Integer id;
@JsonView(Views.Public.class)
private Integer nick_name_id;
//more columns, constructs and getters and setters
У меня естьTableAManager
import java.util.List;
import com.companyname.springapp.business.entities.TableA;
public interface TableAManager {
public List<TableA> test(String name);
}
реализация JPATableAManager
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.companyname.springapp.business.entities.TableA;
import com.companyname.springapp.business.repositories.TableARepository;
@Service
public class JPATableAManager implements TableAManager {
@Autowired
private TableARepository tableARepository;
public List<TableA> getTableA() {
return (List<TableA>) tableARepository.test();
}
PD: извините, мой английский