BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #23100同步于 2012/8/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

请教JPA的一个Unknown entity问题

shunshine
2012/8/4镜像同步2 回复
DB Table: CREATE TABLE [dbo].[Customer]( [CustId] [int] NOT NULL, [CustName] [varchar](32) NOT NULL, [Address] [varchar](256) NULL, CONSTRAINT [PK_Customer_1] PRIMARY KEY CLUSTERED ( [CustId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] Entity定义: import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table ( name = "Customer", schema = "dbo", catalog = "AdminUserDB" ) public class CustomerEntity implements Serializable { private static final long serialVersionUID = 8161336317873293755L; private Integer custId; private String custName; private String address; @Id @Column ( name = "CustId", nullable = false ) public Integer getCustId() { return custId; } public void setCustId( Integer custId ) { this.custId = custId; } @Column ( name = "CustName", nullable = false, length = 32 ) public String getCustName() { return custName; } public void setCustName( String custName ) { this.custName = custName; } @Column ( name = "Address", length = 256 ) public String getAddress() { return address; } public void setAddress( String address ) { this.address = address; } } import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import com.thomsonreuters.collab.admin.persistence.dao.ICustomerDAO; import com.thomsonreuters.collab.admin.persistence.domain.CustomerEntity; CustomerDAO(用Spring写的): @Repository ( "CustomerDAO" ) public class CustomerDAOImpl implements ICustomerDAO { private EntityManager em; @PersistenceContext public void setEntityManager( EntityManager em ) { this.em = em; } @Transactional public void saveCustomer( CustomerEntity customerEntity ) { em.persist(em); em.flush(); } public CustomerEntity getCustomerEntity( Integer custId ) { return em.find(CustomerEntity.class, custId); } } persistence.xml: <persistence 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" version="2.0"> <persistence-unit name="HibernateJPAPU" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>com.thomsonreuters.collab.admin.persistence.domain.UserEntity</class> <class>com.thomsonreuters.collab.admin.persistence.domain.CustomerEntity</class> <class>com.thomsonreuters.collab.admin.persistence.domain.CustOrderEntity</class> </persistence-unit> </persistence> Client端: public void saveCustomer( ) { CustomerEntity customerEntity = new CustomerEntity(); customerEntity.setCustId(1001) customerEntity.setCustName("Li Lei"); customerEntity.setAddress("zhong guan chun road.") customerDAO.saveCustomer(customerEntity); } public CustomerEntity getCustomer( Integer custId ) { CustomerEntity customerEntity = customerDAO.getCustomerEntity(custId); return customerEntity ; } 结果: 对于getCustomer能正确返回一个Customer信息如果DB中的一条Customer信息的话。 对于saveCustomer,则抛出如果异常: 警告: Application {http://ws.admin.company.com/}AdminServiceService#{http://ws.admin.company.com/}saveCustomer has thrown exception, unwinding now org.apache.cxf.interceptor.Fault: Unknown entity: $Proxy23 at org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:155) at org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.createFault(AbstractJAXWSMethodInvoker.java:86) at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:121) at org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:63) at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:75) at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37) at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:106) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263) at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:123) at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:207) at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:213) at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:193) at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:126) at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:185) at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:108) at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:164) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:558) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:489) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:520) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:972) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:417) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:906) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110) at org.eclipse.jetty.server.Server.handle(Server.java:350) at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:442) at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:927) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:784) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:223) at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:46) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:545) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:43) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.IllegalArgumentException: Unknown entity: $Proxy23 at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:863) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240) at $Proxy23.persist(Unknown Source) at com.thomsonreuters.collab.admin.persistence.dao.impl.CustomerDAOImpl.saveCustomer(CustomerDAOImpl.java:27) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) at $Proxy25.saveCustomer(Unknown Source) at com.thomsonreuters.collab.admin.controller.impl.CustomerControllerImpl.saveCustomer(CustomerControllerImpl.java:44) at com.thomsonreuters.collab.admin.ws.AdminService.saveCustomer(AdminService.java:67) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:173) at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:89) 试了几遍了,也在网上搜了,改了,还是一直报这个错,不知道原因在哪。还请各位大牛给指导下,谢谢了
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
shunshine机器人#1 · 2012/8/5
是一个书写错误 em.persist(em); 导致的,已经解决,谢谢关注
ashi0808机器人#2 · 2014/12/12
跟楼主请教一下,我在使用@Table这个注解是,name的值一直飘红,提示cannot resolve table ‘xxx’