本机查询 Jpa 存储库在没有列规范的情况下无法工作
Native Query Jpa Repository Not working without Column specification
大家好,我有一个 class 关系太多,我正在使用 springboot,当我想通过 Hql 从@Query 检索数据时,我得到了数组数组的结果,当我使用 NativeQuery 时,我可以' t select 1 个元素总是 Select *
这是我的 class
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;
}
}
这是我的存储库 class
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() ;
}
当我执行它时它说错误 SQL "NomDLL" 找不到列
好像只允许 select 全部或不,也许结果列表所以它不能 return 一个字段所以如果有人有关于改变结果类型的想法所以它可以得到 2 个字段或 3 个字段的结果不是所有的想法..随时回答(ps \" 是为了逃避,当我添加“\NomDev\”时我得到了
的错误
错误 SQL "IdEtatDev" 未找到)
任何帮助将不胜感激
先把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]);
使用 Google Gson
转换为 json
String json = new Gson().toJson(map);
大家好,我有一个 class 关系太多,我正在使用 springboot,当我想通过 Hql 从@Query 检索数据时,我得到了数组数组的结果,当我使用 NativeQuery 时,我可以' t select 1 个元素总是 Select *
这是我的 class
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;
}
}
这是我的存储库 class
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() ;
}
当我执行它时它说错误 SQL "NomDLL" 找不到列
好像只允许 select 全部或不,也许结果列表所以它不能 return 一个字段所以如果有人有关于改变结果类型的想法所以它可以得到 2 个字段或 3 个字段的结果不是所有的想法..随时回答(ps \" 是为了逃避,当我添加“\NomDev\”时我得到了
的错误错误 SQL "IdEtatDev" 未找到)
任何帮助将不胜感激
先把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]);
使用 Google Gson
转换为 jsonString json = new Gson().toJson(map);