EJB,JavaFX PU java.lang.IllegalArgumentException:Object:model.Person@7e9d562不是已知的实体类型

时间:2013-12-13 00:08:52

标签: java ejb javafx persistence

我一直在使用JavaFx应用程序编程,它使用2个模型类:

package model;

import java.io.Serializable;
import java.util.ArrayList;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;


@Entity
public class Person implements Serializable{

@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long id;
@OneToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE},
           fetch=FetchType.EAGER, mappedBy="Person")
private ArrayList<Produkt>  products= new ArrayList<Produkt>();
public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}
private  String email;
private  String firstName;
private  String lastName;

private  String tel;
private  String kleurCode;
private  String facebook;

public Person() {
    super();
}

public Person(String firstName, String lastName, String email,String tel, String facebook, String kleurCode) {
    setFirstName(firstName);
    setLastName(lastName);
    setEmail(email);
    setFacebook(facebook);
    setTel(tel);
    setKleurCode(kleurCode);
}

public ArrayList<Produkt> getProducts() {
    return products;
}

public void setProducts(ArrayList<Produkt> products) {
    this.products = products;
}

public void setFacebook(String tel)
{
    this.facebook=tel;
}
public String getFacebook() {
    return facebook;
}
public void setKleurCode(String tel)
{
    this.kleurCode=tel;
}
public String getKleurCode() {
    return kleurCode;
}
public String getTel()
{
    return tel;
}
public void setTel(String tel)
{
    this.tel=tel;
}
public String getFirstName() {
    return firstName;
}

public void setFirstName(String fName) {
    firstName=fName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String fName) {
    lastName=fName;
}

public String getPrimary() {
    return getEmail();
}

public String getSecondary() {
    return getEmail();
}

public String getEmail() {
    return email;
}

public void setEmail(String fName) {
    email=fName;
}
}

package model;

import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

@Entity
public class Produkt implements Serializable {
String naam;
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long id;


@ManyToOne(cascade={CascadeType.PERSIST,CascadeType.MERGE},
                                        fetch=FetchType.EAGER)
private Person person;

public Person getPerson() {
    return person;
}

public void setPerson(Person person) {
    this.person = person;
}




public Produkt() {
    super();
}
public Produkt(Person p, String naam){
    p=p;
    naam=naam;
};

public String getNaam() {
    return naam;
}

public void setNaam(String naam) {
    this.naam = naam;
}



public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}
}

然后我有这个Facade类:

  package facade;


  import java.util.List;
  import javax.persistence.EntityManager;
  import javax.persistence.EntityManagerFactory;
  import javax.persistence.Persistence;
  import javax.persistence.PersistenceContext;
  import javax.persistence.Query;
  import model.Person;
  import model.Produkt;

  public class Facade {

  @PersistenceContext(unitName = "EJBModuleDAPU")
  private EntityManager em;


  public Facade()
  {
    em=getEntityManager();
 }

 public void createPerson(Person p) {
    if(em!=null){
        em.persist(p);
    }
    else
    {
        System.out.println("EM was null");
    } 
 }

public void createProduct(Produkt p) {
    em.persist(p);
}

public void editProduct(Produkt p) {
    em.merge(p);

}

public void editPerson(Person p) {
    em.merge(p);

}

public void removePerson(Person p) {
    em.remove(em.merge(p));
}

public void removeProduct(Produkt p) {
    em.remove(em.merge(p));
}

public Person findPerson(Object id) {
    return em.find(Person.class, id);
}

public Produkt findProduct(Object id) {
    return em.find(Produkt.class, id);
}

public List<Person> findAllPerson() {
    Query query = em.createQuery("SELECT m from Person as m");  
    return query.getResultList();
    /*System.out.println(em.toString());
    javax.persistence.criteria.CriteriaQuery cq =    em.getCriteriaBuilder().createQuery();
    cq.select(cq.from(Person.class));
    return em.createQuery(cq).getResultList();*/
}

public List<Person> findAllProdcut() {
    javax.persistence.criteria.CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
    cq.select(cq.from(Produkt.class));
    return em.createQuery(cq).getResultList();
}

protected EntityManager getEntityManager() {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("EJBModuleDAPU");
EntityManager ecm = emf.createEntityManager(); 
return ecm;
} 
}

这是我的持久单元:

<?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="EJBModuleDAPU" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/__default</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <shared-cache-mode>NONE</shared-cache-mode>
    <validation-mode>NONE</validation-mode>
    <properties>
      <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
    </properties>
  </persistence-unit>
</persistence>

应用程序运行但是当我执行lookup()并尝试添加一个人或获取所有列表时:

WORK
javax.ejb.EJBException
file:/Users/Verdonckt/NetBeansProjects/JavaFXApplicationDa/dist/run298548326/JavaFXApplicationDa.jar!/javafxapplicationda/Sample.fxml
  at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5215)
  at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5113)
  at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4901)
  at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2045)
  at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1994)
  at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:213)
  at com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:79)
  at com.sun.proxy.$Proxy199.voegToePerson(Unknown Source)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:606)
  at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie.dispatchToMethod(ReflectiveTie.java:144)
  at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:174)
  at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:528)
  at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:199)
  at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1624)
  at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1486)
  at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:990)
  at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:214)
  at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:742)
  at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:539)
  at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2324)
  at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497)
  at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540)

Exception in Application start method
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.javafx.main.Main.launchApp(Main.java:698)
    at com.javafx.main.Main.main(Main.java:871)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:403)
    at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:47)
    at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115)
    at java.lang.Thread.run(Thread.java:744)
Caused by: javax.ejb.EJBException
    at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5215)
    at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5113)
    at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4901)
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2045)
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1994)
    at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:213)
    at com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:79)
    at com.sun.proxy.$Proxy199.voegToePerson(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie.dispatchToMethod(ReflectiveTie.java:144)
    at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:174)
    at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:528)
    at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:199)
    at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1624)
    at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1486)
    at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:990)
    at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:214)
    at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:742)
    at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:539)
    at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2324)
    at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497)
    at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540)
Caused by: java.lang.IllegalArgumentException: Object: model.Person@7e9d562 is not a known entity type.
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4169)
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:440)
    at facade.Facade.createPerson(Facade.java:35)
    at Beans.SessionBeanPersoon.voegToePerson(SessionBeanPersoon.java:33)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
    at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
    at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5388)
    at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
    at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)
    at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5360)
    at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5348)
    at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:206)
    ... 19 more
2013-12-13 00:52:14.538 java[616:507] [JRSAppKitAWT markAppIsDaemon]: Process manager already initialized: can't fully enable headless mode.
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.javafx.main.Main$2.run(Main.java:948)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:241)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Caused by: java.awt.HeadlessException
    at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:207)
    at java.awt.Window.<init>(Window.java:535)
    at java.awt.Frame.<init>(Frame.java:420)
    at java.awt.Frame.<init>(Frame.java:385)
    at javax.swing.SwingUtilities$SharedOwnerFrame.<init>(SwingUtilities.java:1759)
    at javax.swing.SwingUtilities.getSharedOwnerFrame(SwingUtilities.java:1834)
    at javax.swing.JOptionPane.getRootFrame(JOptionPane.java:1697)
    at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:863)
    at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:667)
    at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:638)
    ... 19 more
Java Result: 1

Glassfish服务器日志:

  WARNING: Cannot drop tables for application EJBModuleDA. The expected DDL file        EJBModuleDA_EJBModuleDAPU_dropDDL.jdbc is not available.
  WARNING: Cannot create tables for application EJBModuleDA. The expected DDL file   EJBModuleDA_EJBModuleDAPU_createDDL.jdbc is not available.
  INFO: EJB5181:Portable JNDI names for EJB SessionBeanPersoon: [java:global/EJBModuleDA/SessionBeanPersoon!Beans.SessionRemote, java:global/EJBModuleDA/SessionBeanPersoon!Beans.SessionBeanPersoon]
  INFO: EJB5182:Glassfish-specific (Non-portable) JNDI names for EJB SessionBeanPersoon: [Beans.SessionRemote, Beans.SessionRemote#Beans.SessionRemote]

任何知道我如何解决这个问题的人?

1 个答案:

答案 0 :(得分:0)

解决。我重新启动系统并重新安装glassfish。现在它可以工作