我有一个名为Publication的Entity类,该类是一个返回List<Publication>
的getAllPublication方法,但我在该方法中的查询有一个类型为List<Object[]>
的resultList,我如何从List<Object[]>
中检索发布实体的列表:-这里的方法:
public List<Publication> getAllPublication() {
List<Object[]> listePublication;
Query q;
em.getTransaction().begin();
q=em.createQuery("SELECT c.titrePublication,
c.datePublication, c.corps,p.login FROM Publication c JOIN c.employee p ");
listePublication = q.getResultList();
//ArrayList<Publication> results = new ArrayList<Publication>();
//for (Object[] resultat : listePublication)
//results.add((Publication) resultat[0]);*/
em.getTransaction().commit();
return results;
}
提前谢谢。这是实体类
package entities;
import java.io.Serializable;
import javax.persistence.*;
@Entity
@NamedQuery(name="Publication.findAll", query="SELECT p FROM Publication p")
public class Publication {
@Id
@Column(name=""idPublication"")
private Integer idPublication;
private String corps;
@Column(name=""datePublication"")
private String datePublication;
@Column(name=""titrePublication"")
private String titrePublication;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="auteur")
private Employee employee;
public Publication() {
}
public Integer getIdPublication() {
return this.idPublication;
}
public void setIdPublication(Integer idPublication) {
this.idPublication = idPublication;
}
public String getCorps() {
return this.corps;
}
public void setCorps(String corps) {
this.corps = corps;
}
public String getDatePublication() {
return this.datePublication;
}
public void setDatePublication(String datePublication) {
this.datePublication = datePublication;
}
public String getTitrePublication() {
return this.titrePublication;
}
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
public void setTitrePublication(String titrePublication) {
this.titrePublication = titrePublication;
}
}
尝试
public List<Publication> getAllPublication() {
TypedQuery<Publication> query = em. createNamedQuery(Publication.FIND_ALL, Publication.class);
return query.getResultList();
}
您的实体看起来像:
package entities;
import java.io.Serializable;
import javax.persistence.*;
@Entity
@NamedQuery(name=Publication.FIND_ALL, query="SELECT p FROM Publication p")
public class Publication {
public static final String FIND_ALL = "Publication.findAll";
@Id
@Column(name=""idPublication"")
private Integer idPublication;
private String corps;
@Column(name=""datePublication"")
private String datePublication;
@Column(name=""titrePublication"")
private String titrePublication;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="auteur")
private Employee employee;
public Publication() {
}
public Integer getIdPublication() {
return this.idPublication;
}
public void setIdPublication(Integer idPublication) {
this.idPublication = idPublication;
}
public String getCorps() {
return this.corps;
}
public void setCorps(String corps) {
this.corps = corps;
}
public String getDatePublication() {
return this.datePublication;
}
public void setDatePublication(String datePublication) {
this.datePublication = datePublication;
}
public String getTitrePublication() {
return this.titrePublication;
}
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
public void setTitrePublication(String titrePublication) {
this.titrePublication = titrePublication;
}
}
您需要通过以下操作创建一个类型化查询:
TypedQuery<Publication> q;
em.getTransaction().begin();
q=em.createQuery("SELECT c.titrePublication,
c.datePublication, c.corps,p.login FROM Publication c JOIN c.employee p ",
Publication.class);
编辑:正如其他答案所示,也需要更改查询以返回"发布"表中的所有内容。
JPA提供了一个SqlResultSetMapping and resultClass
,允许您将本地查询的任何返回映射到实体
您必须在出版物中定义查询NamedNativeQuery
。
@NamedNativeQuery(name="findPublication", query="SELECT c.titrePublication, c.datePublication, c.corps,p.login FROM Publication c JOIN c.employee p", resultClass=Publication.class)
登录属性没有在Publication类中定义,您需要在Publicationwithgetter/setter中添加登录属性,因为您使用join