我有一个我不明白的例外:
[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;
}
}