我有一个Entity类calle Publication,一个名为getAllPublication的方法返回List<Publication>
,但我在方法中的查询有一个类型为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;
}
}
答案 0 :(得分:0)
尝试
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;
}
}
答案 1 :(得分:0)
您需要通过执行以下操作来创建类型化查询:
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);
编辑:正如其他答案所示,查询也需要更改以返回发布表中的所有内容。
答案 2 :(得分:0)
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类中定义,您需要在发布中使用getter / setter添加登录peroperty,因为您使用join从employee表中选择登录