请教JPA的一个Unknown entity问题

shunshine988 2012-08-04 08:34:01
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.collab.thomsonreuters.com/}AdminServiceService#{http://ws.admin.collab.thomsonreuters.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)

试了还几遍了,也在网上搜了,改了,还是一直报这个错,不知道原因在哪。还请各位大牛给指导下,谢谢了
...全文
1322 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
shunshine988 2012-08-05
  • 打赏
  • 举报
回复
不好意思,问题找到,是这句em.persist(em);不小心写错了
haiercs 2012-08-05
  • 打赏
  • 举报
回复
em.persist(customerEntity );
呵呵

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧