2016-04-08 127 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

不客气 –