Java 检索列表<;实体>;从列表<;对象[]>;JPA
我有一个名为Publication的实体类,一个名为getAllPublication的方法,返回Java 检索列表<;实体>;从列表<;对象[]>;JPA,java,jpa,jpql,Java,Jpa,Jpql,我有一个名为Publication的实体类,一个名为getAllPublication的方法,返回列表,但我在该方法中的查询有一个类型为列表,如何从列表检索发布实体列表: -以下是方法: public List<Publication> getAllPublication() { List<Object[]> listePublication; Query q; em.getTransaction().begin(); q=em.creat
列表
,但我在该方法中的查询有一个类型为列表
,如何从列表
检索发布实体列表:
-以下是方法:
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;
}
试一试
您需要通过执行以下操作来创建类型化查询:
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);
typedqueryq;
em.getTransaction().begin();
q=em.createQuery(“选择c.titreplication,
c、 datePublication,c.corps,p.从出版物c登录加入c.employee p“,
出版(类别),;
编辑:如其他答案所示,查询也需要更改以返回发布表中的所有内容。JPA提供了一个
SqlResultSetMapping和resultClass
,允许您将从本机查询返回的内容映射到实体中
您必须在出版物中定义查询namedNativeRequesty
@NamedNativeQuery(name="findPublication", query="SELECT c.titrePublication, c.datePublication, c.corps,p.login FROM Publication c JOIN c.employee p", resultClass=Publication.class)
login属性未在Publication类中定义,您需要使用getter/setter在Publication中添加login perperty,因为您使用join从employee表中选择login是没有意义的。如果需要列表,请使用检索出版物列表的查询:
从出版物p中选择p
。
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);
@NamedNativeQuery(name="findPublication", query="SELECT c.titrePublication, c.datePublication, c.corps,p.login FROM Publication c JOIN c.employee p", resultClass=Publication.class)