2016-04-08 82 views
1

嘿大家我有一個類與太多的關係使用springboot時,我想從@Query通過Hql檢索數據我得到了數組數組的結果,當我使用NativeQuery我無法選擇1種元素它總是選擇*本機查詢Jpa存儲庫不工作沒有列規範

這裏是我的類

import java.util.HashSet; 
import java.util.Set; 
import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.JoinTable; 
import javax.persistence.ManyToMany; 
import javax.persistence.ManyToOne; 
import javax.persistence.Table; 

@Entity 
@Table(name="\"DEV\"") 
public class Dev { 

@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
@Column(name="\"IdDev\"") 
private int id ; 
@Column(name="\"NomDev\"") 
private String nomdev; 
@Column(name="\"NomDLL\"") 
private String dll ; 
@ManyToOne(fetch=FetchType.LAZY, cascade = CascadeType.ALL) 
@JoinColumn(name="\"IdEtatDev\"") 
private EtatDev etatdev ; 
@ManyToOne(fetch=FetchType.LAZY, cascade = CascadeType.ALL) 
@JoinColumn(name="\"IdEcu\"") 
private Ecu ecu ; 


@ManyToMany(fetch=FetchType.LAZY) 
@JoinTable(name="\"VEH_BY_DEV\"" 
     ,joinColumns={@JoinColumn(name="\"IdDev\"")}, 
     inverseJoinColumns={@JoinColumn(name="\"GRPMOD\"")}) 

private Set<Vehid> vehid = new HashSet<>(); 
@ManyToOne(fetch=FetchType.LAZY) 
private Maj maj ; 



public Set<Vehid> getVehid() { 
    return vehid; 
} 
public void setVehid(Set<Vehid> vehid) { 
    this.vehid = vehid; 
} 
public Ecu getEcu() { 
    return ecu; 
} 
public void setEcu(Ecu ecu) { 
    this.ecu = ecu; 
} 
public int getId() { 
    return id; 
} 
public void setId(int id) { 
    this.id = id; 
} 
public String getNomdev() { 
    return nomdev; 
} 
public void setNomdev(String nomdev) { 
    this.nomdev = nomdev; 
} 
public String getDll() { 
    return dll; 
} 
public void setDll(String dll) { 
    this.dll = dll; 
} 
public EtatDev getEtatdev() { 
    return etatdev; 
} 
public void setEtatdev(EtatDev etatdev) { 
    this.etatdev = etatdev; 
} 

public Dev() { 
    super(); 
} 
public Dev(int id, String nomdev, String dll, EtatDev etatdev, Ecu ecu, Set<Vehid> vehid) { 
    super(); 
    this.id = id; 
    this.nomdev = nomdev; 
    this.dll = dll; 
    this.etatdev = etatdev; 
    this.ecu = ecu; 
    this.vehid = vehid; 
} 



} 

,這我的倉庫類

import java.util.List; 

import javax.transaction.Transactional; 

import org.springframework.data.jpa.repository.JpaRepository; 
import org.springframework.data.jpa.repository.Query; 



@Transactional 
public interface DevRepository extends JpaRepository<Dev, Integer> { 


@Query(value="SELECT \"IdDev\" "\NomDev\" FROM \"DEV\" ",nativeQuery=true) 
    List<Dev> getDevwithEtat() ; 
} 

當我執行這一點, saye ERROR SQL「NomDLL」列未找到

它就像它只允許選擇全部或不全部,也許結果列表,所以它不能返回一個字段,所以如果任何人有想改變結果類型,所以它可以得到2個字段或三個不是所有想法的結果..隨意回答(ps的\「是爲了逃避,當我添加」\ NomDev \「我得到了一個錯誤

錯誤SQL」IdEtatDev「不發現)

任何幫助,將不勝感激

+0

變化JSON後 「\ NomDev \」 這種\ 「NomDev \」 在您的SQL查詢 –

+0

我不會解決我的問題因爲它不是如何寫它返回值結構,不尊重,所以我需要做一個特殊的結果類型或它不會像我想要的那樣工作 –

+0

然後你的結果類型對象數組更改列表與這個名單

回答

1

首先改變List<Dev> getDevwithEtat();List<Object[]> getDevwithEtat();

,並轉換JSON你devRepository.getDevwithEtat()結果這樣

Map<Integer, String> map = new HashMap<Integer, String>(); 
for (Object[] result : devRepository.getDevwithEtat()) 
    map.put((Integer)result[0], (String)result[1]); 

轉換與谷歌GSON

String json = new Gson().toJson(map); 
+0

謝謝你的工作! –

+0

不客氣 –