Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检索列表<;实体>;从列表<;对象[]>;JPA_Java_Jpa_Jpql - Fatal编程技术网

Java 检索列表<;实体>;从列表<;对象[]>;JPA

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

我有一个名为Publication的实体类,一个名为getAllPublication的方法,返回
列表
,但我在该方法中的查询有一个类型为
列表
,如何从
列表
检索发布实体列表: -以下是方法:

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)