我还没有找到上一个主题的问题(调试我的事情)所以我的问题: Java中的WebApp,使用EJB,使用实体。 WebApp通过调用远程接口来调用EBJ。接下来,EJB实现使用实体。这是堆栈:
Caused by: java.lang.IllegalArgumentException: Object: ejbpersistance.entities.User@bfbbebb is not a known entity type.
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4228)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496)
at ejbpersistance.dao.DaoAbstract.save(DaoAbstract.java:54)
at ejbimpl.ejb.UserBean.createUser(UserBean.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1081)
at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1153)
at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:4786)
at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:656)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608)
at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:55)
at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608)
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163)
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:140)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:369)
at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:4758)
at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4746)
at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:205)
... 48 more
实体:
package ejbpersistance.entities;
import javax.persistence.*;
@Entity(name = "user")
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name="email", unique = true, nullable = false)
private String email;
@Column(name="password", unique = false, nullable = false)
private String password;
@Column(name="subscriber", unique = false, nullable = false)
private Boolean subscriber;
public User(){
}
public User(String email, String password) {
this.email = email;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Boolean getSubscriber() {
return subscriber;
}
}
EJB实现:
@Override
public boolean createUser(String mail, String password) {
UserDao userdao = new UserDao();
User user = new User();
user.setEmail(mail);
user.setPassword(password);
userdao.save(user);
return true;
}
的persistence.xml:
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="ejb-jpa">
<class>ejbpersistance.entities.User</class>
<class>ejbpersistance.entities.Comment</class>
<class>ejbpersistance.entities.Article</class>
<class>ejbpersistance.entities.User</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/ejb"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="root"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
</properties>
</persistence-unit>
</persistence>
UserDAO的:
public class UserDao extends DaoAbstract<User, Integer>{
}
DaoAbstract:
公共课DaoAbstract {private EntityManagerFactory emf;
public EntityManagerFactory getEntityManagerFactory() {
if(emf == null)
emf = Persistence.createEntityManagerFactory("ejb-jpa");
return emf;
}
Class<C> entityClass;
{
entityClass = (Class<C>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
public List<C> getAll() {
emf = getEntityManagerFactory();
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
List<C> object = em.createQuery("SELECT obj FROM " + entityClass.getAnnotation(Entity.class).name() + " obj")
.getResultList();
em.flush();
em.getTransaction().commit();
em.close();
return object;
}
public C get(I id) {
emf = getEntityManagerFactory();
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
C object = em.find(entityClass, id);
em.flush();
em.getTransaction().commit();
em.close();
return object;
}
public C save(C object) {
emf = getEntityManagerFactory();
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(object);
em.flush();
em.getTransaction().commit();
em.close();
return object;
}
public void delete(C object) {
emf = getEntityManagerFactory();
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.remove(em.contains(object) ? object : em.merge(object));
em.flush();
em.getTransaction().commit();
em.close();
}
}
有什么东西不见了?我认为不是这样的问题是什么? 谢谢大家