2012-10-23 43 views
1

您好我在JPA是新的,當我想堅持我的對象得到這些錯誤:JPA例外:對象:null不是一個已知的實體類型

java.lang.IllegalArgumentException: Object: null is not a known entity type. 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:437) 
    at database.TarpineManager.persist(TarpineManager.java:31) 
    at gijos.InsertToDB.insertLink(InsertToDB.java:34) 
    at gijos.VilpraParser.run(VilpraParser.java:77) 

還有就是我的冷杉對象類,我想要做的關係,與其他XLinksMedia類,我覺得問題出在

@OneToMany(mappedBy = "xParserLink", targetEntity = XLinksMedia.class, fetch=FetchType.EAGER, cascade = CascadeType.ALL) 
private List<XLinksMedia> fotos; 

,但我不知道什麼是錯的:

package database.entity; 

import java.io.Serializable; 
import java.util.Date; 
import java.util.List; 
import javax.persistence.Basic; 
import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.NamedQueries; 
import javax.persistence.NamedQuery; 
import javax.persistence.OneToMany; 
import javax.persistence.OneToOne; 
import javax.persistence.Table; 
import javax.persistence.Temporal; 
import javax.persistence.TemporalType; 
import javax.xml.bind.annotation.XmlRootElement; 

@Entity 
@Table(name = "x_parser_links") 
@XmlRootElement 
@NamedQueries({ 
    @NamedQuery(name = "XParserLinks.findAll", query = "SELECT x FROM XParserLinks x"), 
    @NamedQuery(name = "XParserLinks.findByLinkId", query = "SELECT x FROM XParserLinks x WHERE x.linkId = :linkId"), 
    @NamedQuery(name = "XParserLinks.findByPageId", query = "SELECT x FROM XParserLinks x WHERE x.pageId = :pageId"), 
    @NamedQuery(name = "XParserLinks.findByLink", query = "SELECT x FROM XParserLinks x WHERE x.link = :link"), 
    @NamedQuery(name = "XParserLinks.findByLevel", query = "SELECT x FROM XParserLinks x WHERE x.level = :level"), 
    @NamedQuery(name = "XParserLinks.findByLinkType", query = "SELECT x FROM XParserLinks x WHERE x.linkType = :linkType"), 
    @NamedQuery(name = "XParserLinks.findByCreateDate", query = "SELECT x FROM XParserLinks x WHERE x.createDate = :createDate"), 
    @NamedQuery(name = "XParserLinks.findByDelDate", query = "SELECT x FROM XParserLinks x WHERE x.delDate = :delDate")}) 
public class XParserLinks implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "link_id") 
    private Integer linkId; 
    @Column(name = "page_id") 
    private Integer pageId; 
    @Column(name = "link") 
    private String link; 
    @Column(name = "level") 
    private Integer level; 
    @Column(name = "link_type") 
    private Short linkType; 
    @Column(name = "create_date") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date createDate; 
    @Column(name = "del_date") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date delDate; 
    @JoinColumn(name = "tev_link_id") 
    @OneToOne 
    private XParserLinks tevas; 
    @OneToMany(mappedBy = "xParserLink", targetEntity = XLinksMedia.class, fetch=FetchType.EAGER, cascade = CascadeType.ALL) 
    private List<XLinksMedia> fotos; 


    public XParserLinks() { 
    } 

    public XParserLinks(Integer linkId) { 
     this.linkId = linkId; 
    } 

    public Integer getLinkId() { 
     return linkId; 
    } 

    public void setLinkId(Integer linkId) { 
     this.linkId = linkId; 
    } 

    public Integer getPageId() { 
     return pageId; 
    } 

    public void setPageId(Integer pageId) { 
     this.pageId = pageId; 
    } 

    public String getLink() { 
     return link; 
    } 

    public void setLink(String link) { 
     this.link = link; 
    } 

    public Integer getLevel() { 
     return level; 
    } 

    public void setLevel(Integer level) { 
     this.level = level; 
    } 

    public Short getLinkType() { 
     return linkType; 
    } 

    public void setLinkType(Short linkType) { 
     this.linkType = linkType; 
    } 

    public Date getCreateDate() { 
     return createDate; 
    } 

    public void setCreateDate(Date createDate) { 
     this.createDate = createDate; 
    } 

    public Date getDelDate() { 
     return delDate; 
    } 

    public void setDelDate(Date delDate) { 
     this.delDate = delDate; 
    } 

    public XParserLinks getTevas() { 
     return tevas; 
    } 

    public void setTevas(XParserLinks tevas) { 
     this.tevas = tevas; 
    } 

    public List<XLinksMedia> getFotos() { 
     return fotos; 
    } 

    public void setFotos(List<XLinksMedia> fotos) { 
     this.fotos = fotos; 
    } 

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (linkId != null ? linkId.hashCode() : 0); 
     return hash; 
    } 

    @Override 
    public boolean equals(Object object) { 
     // TODO: Warning - this method won't work in the case the id fields are not set 
     if (!(object instanceof XParserLinks)) { 
      return false; 
     } 
     XParserLinks other = (XParserLinks) object; 
     if ((this.linkId == null && other.linkId != null) || (this.linkId != null && !this.linkId.equals(other.linkId))) { 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public String toString() { 
     return "database.entity.XParserLinks[ linkId=" + linkId + " ]"; 
    } 

} 

個爲照片二等對象

package database.entity; 

import java.io.Serializable; 
import javax.persistence.EmbeddedId; 
import javax.persistence.Entity; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.NamedQueries; 
import javax.persistence.NamedQuery; 
import javax.persistence.Table; 
import javax.xml.bind.annotation.XmlRootElement; 

@Entity 
@Table(name = "x_links_media") 
@XmlRootElement 
@NamedQueries({ 
    @NamedQuery(name = "XLinksMedia.findAll", query = "SELECT x FROM XLinksMedia x"), 
    @NamedQuery(name = "XLinksMedia.findByLinkId", query = "SELECT x FROM XLinksMedia x WHERE x.xLinksMediaPK.linkId = :linkId"), 
    @NamedQuery(name = "XLinksMedia.findByImage", query = "SELECT x FROM XLinksMedia x WHERE x.xLinksMediaPK.image = :image")}) 
public class XLinksMedia implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @EmbeddedId 
    protected XLinksMediaPK xLinksMediaPK; 
    @ManyToOne 
    @JoinColumn(name = "link_id") 
    private XParserLinks xParserLink; 

    public XLinksMedia() { 
    } 

    public XLinksMedia(XLinksMediaPK xLinksMediaPK) { 
     this.xLinksMediaPK = xLinksMediaPK; 
    } 

    public XLinksMedia(int linkId, String image) { 
     this.xLinksMediaPK = new XLinksMediaPK(linkId, image); 
    } 

    public XLinksMediaPK getXLinksMediaPK() { 
     return xLinksMediaPK; 
    } 

    public void setXLinksMediaPK(XLinksMediaPK xLinksMediaPK) { 
     this.xLinksMediaPK = xLinksMediaPK; 
    } 

    public XParserLinks getxParserLink() { 
     return xParserLink; 
    } 

    public void setxParserLink(XParserLinks xParserLink) { 
     this.xParserLink = xParserLink; 
    } 

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (xLinksMediaPK != null ? xLinksMediaPK.hashCode() : 0); 
     return hash; 
    } 

    @Override 
    public boolean equals(Object object) { 
     // TODO: Warning - this method won't work in the case the id fields are not set 
     if (!(object instanceof XLinksMedia)) { 
      return false; 
     } 
     XLinksMedia other = (XLinksMedia) object; 
     if ((this.xLinksMediaPK == null && other.xLinksMediaPK != null) || (this.xLinksMediaPK != null && !this.xLinksMediaPK.equals(other.xLinksMediaPK))) { 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public String toString() { 
     return "database.entity.XLinksMedia[ xLinksMediaPK=" + xLinksMediaPK + " ]"; 
    } 

} 

而且堅持對象是這樣的方法:

obj= new XParserLinks(); 
    obj.setCreateDate(new Date()); 
    obj.setLevel(1); 
    obj.setPageId(2); 
    obj.setLink(link); 
    obj.setLinkType((short) 2); 

     TarpineManager.startTransaction(); 

     TarpineManager.persist(obj); 

     System.out.println("NAUJAS LINKAS"); 
     TarpineManager.commitTransaction(); 
+1

如果您認爲'OneToMany'存在問題,請嘗試對其進行評論並運行。如果它有效,那麼你知道這是問題,如果你遇到同樣的問題,你知道在別處尋找。 –

回答

1

只是胡亂猜測:你想在實體fotos實例變量要堅持命名obj是從未設置,因此null。空指針似乎不是一對多關係的法律實體。

相關問題