GlassFish 3.1.1을 사용하고 있습니다. 및 NetBeans 6.9.1. NetBeans에서 웹 응용 프로그램을 만들고 엔티티 클래스를 생성했습니다. 내가 추가 한 것은 @GeneratedValue 주석뿐입니다. 다음은 코드입니다.알 수없는 bean 엔티티 클래스 - Glassfish 및 NetBeans의 오류
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package entities.worker;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
/**
*
* @author pzielins
*/
@Entity
@Table(name = "cdrconfig", catalog = "cdrworker_db", schema = "public")
@NamedQueries({
@NamedQuery(name = "CdrConfig.findAll", query = "SELECT c FROM CdrConfig c"),
@NamedQuery(name = "CdrConfig.findById", query = "SELECT c FROM CdrConfig c WHERE c.id = :id"),
@NamedQuery(name = "CdrConfig.findByCdrpath", query = "SELECT c FROM CdrConfig c WHERE c.cdrpath = :cdrpath"),
@NamedQuery(name = "CdrConfig.findByWorkerinterval", query = "SELECT c FROM CdrConfig c WHERE c.workerinterval = :workerinterval"),
@NamedQuery(name = "CdrConfig.findByMakebackup", query = "SELECT c FROM CdrConfig c WHERE c.makebackup = :makebackup"),
@NamedQuery(name = "CdrConfig.findByBackuppath", query = "SELECT c FROM CdrConfig c WHERE c.backuppath = :backuppath"),
@NamedQuery(name = "CdrConfig.findByLastsyncdate", query = "SELECT c FROM CdrConfig c WHERE c.lastsyncdate = :lastsyncdate"),
@NamedQuery(name = "CdrConfig.findByWaslastsyncmanual", query = "SELECT c FROM CdrConfig c WHERE c.waslastsyncmanual = :waslastsyncmanual")})
public class CdrConfig implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id", nullable = false)
private Integer id;
@Column(name = "cdrpath", length = 10485760)
private String cdrpath;
@Column(name = "workerinterval")
private Integer workerinterval;
@Column(name = "makebackup")
private Boolean makebackup;
@Column(name = "backuppath", length = 10485760)
private String backuppath;
@Column(name = "lastsyncdate")
@Temporal(TemporalType.TIMESTAMP)
private Date lastsyncdate;
@Column(name = "waslastsyncmanual")
private Boolean waslastsyncmanual;
public CdrConfig() {
}
public CdrConfig(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCdrpath() {
return cdrpath;
}
public void setCdrpath(String cdrpath) {
this.cdrpath = cdrpath;
}
public Integer getWorkerinterval() {
return workerinterval;
}
public void setWorkerinterval(Integer workerinterval) {
this.workerinterval = workerinterval;
}
public Boolean getMakebackup() {
return makebackup;
}
public void setMakebackup(Boolean makebackup) {
this.makebackup = makebackup;
}
public String getBackuppath() {
return backuppath;
}
public void setBackuppath(String backuppath) {
this.backuppath = backuppath;
}
public Date getLastsyncdate() {
return lastsyncdate;
}
public void setLastsyncdate(Date lastsyncdate) {
this.lastsyncdate = lastsyncdate;
}
public Boolean getWaslastsyncmanual() {
return waslastsyncmanual;
}
public void setWaslastsyncmanual(Boolean waslastsyncmanual) {
this.waslastsyncmanual = waslastsyncmanual;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.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 CdrConfig)) {
return false;
}
CdrConfig other = (CdrConfig) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "entities.worker.CdrConfig[id=" + id + "]";
}
}
그런 다음 Entity 클래스 용 JPAController 클래스를 생성했습니다.
내 응용 프로그램이 데이터베이스 작업을 할 필요가 있기 때문에/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package jpa.worker;
import entities.worker.CdrConfig;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import jpa.exceptions.NonexistentEntityException;
import jpa.exceptions.PreexistingEntityException;
/**
*
* @author pzielins
*/
public class CdrConfigJpaController {
public CdrConfigJpaController() {
emf = Persistence.createEntityManagerFactory("CDRFileWorkerPU");
}
private EntityManagerFactory emf = null;
public EntityManager getEntityManager() {
return emf.createEntityManager();
}
public void create(CdrConfig cdrConfig) throws PreexistingEntityException, Exception {
EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();
em.persist(cdrConfig);
em.getTransaction().commit();
} catch (Exception ex) {
if (findCdrConfig(cdrConfig.getId()) != null) {
throw new PreexistingEntityException("CdrConfig " + cdrConfig + " already exists.", ex);
}
throw ex;
} finally {
if (em != null) {
em.close();
}
}
}
public void edit(CdrConfig cdrConfig) throws NonexistentEntityException, Exception {
EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();
cdrConfig = em.merge(cdrConfig);
em.getTransaction().commit();
} catch (Exception ex) {
String msg = ex.getLocalizedMessage();
if (msg == null || msg.length() == 0) {
Integer id = cdrConfig.getId();
if (findCdrConfig(id) == null) {
throw new NonexistentEntityException("The cdrConfig with id " + id + " no longer exists.");
}
}
throw ex;
} finally {
if (em != null) {
em.close();
}
}
}
public void destroy(Integer id) throws NonexistentEntityException {
EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();
CdrConfig cdrConfig;
try {
cdrConfig = em.getReference(CdrConfig.class, id);
cdrConfig.getId();
} catch (EntityNotFoundException enfe) {
throw new NonexistentEntityException("The cdrConfig with id " + id + " no longer exists.", enfe);
}
em.remove(cdrConfig);
em.getTransaction().commit();
} finally {
if (em != null) {
em.close();
}
}
}
public List<CdrConfig> findCdrConfigEntities() {
return findCdrConfigEntities(true, -1, -1);
}
public List<CdrConfig> findCdrConfigEntities(int maxResults, int firstResult) {
return findCdrConfigEntities(false, maxResults, firstResult);
}
private List<CdrConfig> findCdrConfigEntities(boolean all, int maxResults, int firstResult) {
EntityManager em = getEntityManager();
try {
CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
cq.select(cq.from(CdrConfig.class));
Query q = em.createQuery(cq);
if (!all) {
q.setMaxResults(maxResults);
q.setFirstResult(firstResult);
}
return q.getResultList();
} finally {
em.close();
}
}
public CdrConfig findCdrConfig(Integer id) {
EntityManager em = getEntityManager();
try {
return em.find(CdrConfig.class, id);
} finally {
em.close();
}
}
public int getCdrConfigCount() {
EntityManager em = getEntityManager();
try {
CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
Root<CdrConfig> rt = cq.from(CdrConfig.class);
cq.select(em.getCriteriaBuilder().count(rt));
Query q = em.createQuery(cq);
return ((Long) q.getSingleResult()).intValue();
} finally {
em.close();
}
}
}
, 내가 넷빈즈 지속성 단위에 의해 생성 된 편집 한 지금은이 같은 STH 있습니다 :
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="CDRFileWorkerPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/cdrworkerdb</jta-data-source>
<class>entities.config.CdrConfig</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="eclipselink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>
<persistence-unit name="CDRDataStorePU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/cdrdb</jta-data-source>
<class>entities.cdr.CallRecord</class>
<class>entities.cdr.RecordColumn</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="eclipselink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>
</persistence>
다 될 때까지 괜찮 여기에 코드입니다 내 JSF에서이 방법을 사용하려고하면 지금, 그러나 콩 관리 :
public void test() {
try {
CdrConfig cfg = new CdrConfig();
cfg.setBackuppath("foo");
CdrConfigJpaController cjc = new CdrConfigJpaController();
cjc.create(cfg);
Record rec = new Record();
RecordJpaController rjc = new RecordJpaController();
rjc.create(rec);
RecordColumn col = new RecordColumn();
col.setColumnname("foo1");
col.setRecord(rec);
RecordColumnJpaController rcjc = new RecordColumnJpaController();
rcjc.create(col);
} catch (Exception ex) {
Logger.getLogger(FileWorkerBackup.class.getName()).log(Level.SEVERE, null, ex);
}
}
나는 오류 다음 얻을 :
,java.lang.IllegalArgumentException: Unknown entity bean class: class entities.worker.CdrConfig, please verify that this class has been marked with the @Entity annotation.
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.find(EntityManagerImpl.java:576)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.find(EntityManagerImpl.java:460)
at jpa.worker.CdrConfigJpaController.findCdrConfig(CdrConfigJpaController.java:125)
at jpa.worker.CdrConfigJpaController.create(CdrConfigJpaController.java:43)
at web.FileWorkerBackup.test(FileWorkerBackup.java:52)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at...
구글에서 "모듈에 모든 엔티티 클래스 포함"체크를하는 것이 도움이되는 경우가 있습니다. 그런 다음 테이블 간 크로스 db 참조에 대한 오류가 발생합니다. 나는 이것을하려고하지 않고있다). 글래스 피쉬를 다시 시작하는 것이 (폐쇄 세션으로 인해 풀리지 않음) Google에서 발견되었지만 도움이되지 않습니다. 제발, 올바른 방향을 가르쳐주세요.
덕분에 짝짓기를해야합니다! Dunno는 잘못된 패키지 이름을 어디에서 가져 왔습니까?하지만 감사합니다. – greenskin