2012-10-09 65 views
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; 
    } 

你能帮助我吗?

这里的namedquery:

/** 
* 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; 
    } 

} 
+1

向我们显示'搜索'命名查询,也许DAO。 – Erik

+0

@Erik感谢您的评论。我更新了这个问题。 –

+1

我想你还需要发布完整的Ansokan实体。 –

回答

4

要绑定一个字符串值,从类型PRVNummer搜索领域prvnummer。 更改public List<Ansokan> search(String search)public List<Ansokan> search(PRVNummer search)

+0

是的,你是对的。以下似乎工作:'@NamedQuery(名称=“搜索”,查询=“选择一个从Ansokan一个WHERE a.prvnummer.nummer LIKE:searchTerm”)'但我得到0结果这是一个不同的问题,现在也不例外。谢谢你的回答! –

相关问题