0

我有一个我不明白的例外:

[2012-10-09 08:59:56:152 CEST] 000000a0 SystemOut     O 08:59:56,151  INFO ArendesokningActionHandler:84 - i search
[2012-10-09 08:59:56:152 CEST] 000000a0 SystemOut     O 08:59:56,152 DEBUG AnsokanDAOImpl:36 - 0. sökning utförs
[2012-10-09 08:59:56:152 CEST] 000000a0 SystemOut     O 08:59:56,152 DEBUG AnsokanDAOImpl:38 - 1. sökning utförs
[2012-10-09 08:59:56:160 CEST] 000000a0 SystemOut     O 08:59:56,160 DEBUG AnsokanDAOImpl:40 - 2. sökning utförs
[2012-10-09 08:59:56:160 CEST] 000000a0 SystemOut     O 08:59:56,160 DEBUG AnsokanDAOImpl:42 - 3. sökning utförs
[2012-10-09 08:59:56:160 CEST] 000000a0 SystemOut     O 08:59:56,160  INFO AnsokanDAOImpl:44 - sökning utförs
[2012-10-09 08:59:56:167 CEST] 000000a0 SystemOut     O 08:59:56,165 ERROR AnsokanDAOImpl:48 - Kunde inte söka på: 1201322-3
<openjpa-2.1.1-SNAPSHOT-r422266:1141200 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: No metadata was found for type "class java.lang.String". The class is not enhanced.

代码是

@Stateless
public class AnsokanDAOImpl implements AnsokanDAO {

    @PersistenceContext(unitName = EJBConstants.PERSISTENCE_UNIT_NAME)
    private EntityManager em;

    private final static Logger logger = Logger.getLogger(AnsokanDAOImpl.class);


    @SuppressWarnings("unchecked")
    public List<Ansokan> search(String search) {
        List<Ansokan> ansokningar = new ArrayList<Ansokan>();
        logger.debug("0. sökning utförs");
        try {
            logger.debug("1. sökning utförs");
            Query query = em.createNamedQuery("search");
            logger.debug("2. sökning utförs");
            query.setParameter("search", search);
            logger.debug("3. sökning utförs");

            logger.info("sökning utförs");
            ansokningar = (List<Ansokan>) query.getResultList();
            logger.info("antal träffar i sökning: "+ansokningar.size());            
        } catch(Exception e){ 
            logger.error("Kunde inte söka på: "+search, e);
        }

        return ansokningar;
    }

你能帮助我吗?

这是命名查询:

/**
 * Entity implementation class for Entity: Ansokan
 *
 */
@Entity(name = "Ansokan")
@Table(name="TP003_ANSOKAN")
@NamedQueries({
    @NamedQuery(name = "search", query = "SELECT a FROM Ansokan a WHERE a.prvnummer LIKE :search"),
    @NamedQuery(name = "findAnsokanByNumId", query = "SELECT a FROM Ansokan a WHERE a.prvnummer.numId = :numId"),
})

这是完整的 Ansokan 实体:

package se.prv.pandora.arendeprocess.entity;

/**
 * @author Fredrik Gunnfors (adbfgu)
 *
 */

import java.io.Serializable;
import java.sql.Timestamp;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import javax.persistence.CascadeType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;


/**
 * Entity implementation class for Entity: Ansokan
 *
 */
@Entity(name = "Ansokan")
@Table(name="TP003_ANSOKAN")
@NamedQueries({
    @NamedQuery(name = "search", query = "SELECT a FROM Ansokan a WHERE a.prvnummer LIKE :search"),
    @NamedQuery(name = "findAnsokanByNumId", query = "SELECT a FROM Ansokan a WHERE a.prvnummer.numId = :numId"),
})


public class Ansokan implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="Seq_ansokan_id")
    @SequenceGenerator(name="Seq_ansokan_id", sequenceName="SEQ_TP003_ANSID", allocationSize=1)
    @Column(name = "ANSID", nullable = false)
    private int ansId;

    @ManyToOne
    @JoinColumn(name="numId")
    PRVNummer prvnummer;


    private Integer systemTypId; 
    private Integer systemTypDelId; 

    private Timestamp loggTid; 

    @Column(name = "INGDATUM", length = 10)
    private Date ingivningsDatum;

    @Column(name = "STATUSID")
    private Integer statusId;

    @Column(name = "BENAMNING", length = 500)
    private String benamning; //ASTATUS

    @Column(name = "ANKDATUM", length = 10)
    private Date ankomstDatum;

    @Column(name = "INKDATUM", length = 10)
    private Date inkomDatum;

    @Column(name = "BESLUTSDATUM", length = 10)
    private Date beslutsDatum;

    @Column(name = "ANSVARIG_HANDLID")
    private Integer ansvarigHandlaggareId;

    @Column(name = "SKAPAD_HANDLID")
    private Integer skapadHandlaggareId;

    @Column(name = "EGENSKAPID")
    private Integer egenskapId;

    @Column(name = "PRIORITET", length = 1)
    private String prioritet; 

    @OneToMany(mappedBy="ansokan", cascade=CascadeType.ALL)
    private List<ArbetsMomentLog> arbetsuppgifter = new ArrayList<ArbetsMomentLog>();



    // Konstruktor
    public Ansokan() {
        super();
    }


    public int getAnsId() {
        return ansId;
    }


    public void setAnsId(int ansId) {
        this.ansId = ansId;
    }


    public PRVNummer getPrvnummer() {
        return prvnummer;
    }


    public void setPrvnummer(PRVNummer prvnummer) {
        this.prvnummer = prvnummer;
    }


    public Integer getSystemTypId() {
        return systemTypId;
    }


    public void setSystemTypId(Integer systemTypId) {
        this.systemTypId = systemTypId;
    }


    public Integer getSystemTypDelId() {
        return systemTypDelId;
    }


    public void setSystemTypDelId(Integer systemTypDelId) {
        this.systemTypDelId = systemTypDelId;
    }


    public Timestamp getLoggTid() {
        return loggTid;
    }


    public void setLoggTid(Timestamp loggTid) {
        this.loggTid = loggTid;
    }


    public Integer getStatusId() {
        return statusId;
    }


    public void setStatusId(Integer statusId) {
        this.statusId = statusId;
    }


    public String getBenamning() {
        return benamning;
    }


    public void setBenamning(String benamning) {
        this.benamning = benamning;
    }


    public Date getIngivningsDatum() {
        return ingivningsDatum;
    }


    public void setIngivningsDatum(Date ingivningsDatum) {
        this.ingivningsDatum = ingivningsDatum;
    }


    public Date getAnkomstDatum() {
        return ankomstDatum;
    }


    public void setAnkomstDatum(Date ankomstDatum) {
        this.ankomstDatum = ankomstDatum;
    }


    public Date getInkomDatum() {
        return inkomDatum;
    }


    public void setInkomDatum(Date inkomDatum) {
        this.inkomDatum = inkomDatum;
    }


    public Date getBeslutsDatum() {
        return beslutsDatum;
    }


    public void setBeslutsDatum(Date beslutsDatum) {
        this.beslutsDatum = beslutsDatum;
    }


    public Integer getAnsvarigHandlaggareId() {
        return ansvarigHandlaggareId;
    }


    public void setAnsvarigHandlaggareId(Integer ansvarigHandlaggareId) {
        this.ansvarigHandlaggareId = ansvarigHandlaggareId;
    }


    public Integer getSkapadHandlaggareId() {
        return skapadHandlaggareId;
    }


    public void setSkapadHandlaggareId(Integer skapadHandlaggareId) {
        this.skapadHandlaggareId = skapadHandlaggareId;
    }


    public Integer getEgenskapId() {
        return egenskapId;
    }


    public void setEgenskapId(Integer egenskapId) {
        this.egenskapId = egenskapId;
    }


    public String getPrioritet() {
        return prioritet;
    }


    public void setPrioritet(String prioritet) {
        this.prioritet = prioritet;
    }


    public List<ArbetsMomentLog> getArbetsuppgifter() {
        return arbetsuppgifter;
    }


    public void setArbetsuppgifter(List<ArbetsMomentLog> arbetsuppgifter) {
        this.arbetsuppgifter = arbetsuppgifter;
    }

    public void addArbetsuppgifter(List<ArbetsMomentLog> arbetsuppgifter) {
        if(this.arbetsuppgifter!=null)
            this.arbetsuppgifter.addAll(arbetsuppgifter);
        else {
            this.arbetsuppgifter = arbetsuppgifter;
        }
    }

    public ArbetsMomentLog getArbetsuppgiftByTyp(int arbMomTyp) {
        ArbetsMomentLog amlog = null;
        for(ArbetsMomentLog aml: this.arbetsuppgifter) {
            if(aml.getArbetsMomentId()==arbMomTyp) {
                amlog = aml;
                break;
            }

        }
        return amlog;
    }

}
4

1 回答 1

4

您正在绑定一个 String 值以prvnummer从 type中搜索 Field PRVNummer。更改public List<Ansokan> search(String search)public List<Ansokan> search(PRVNummer search)

于 2012-10-09T07:55:12.223 回答