2016-06-06 20 views
0

Ich habe diesen einfachen Code, der zu der folgenden Ausnahme führt, was könnte das Problem sein ??In JPA, eine @ManyToOne als @Id wirft ClassCastException beim Ausführen em.getReference()

MenuPK menuPK = new MenuPK(aVenueId, aMenuId); 
Menu menu = em.getReference(Menu.class, menuPK); // where em is an EntityManager 
//Menu menu = em.find(Menu.class, menuPK); // this works fine!! 

// full trace 
Exception Description: An internal error occurred accessing the primary key object [[email protected]]. 
Internal Exception: java.lang.ClassCastException: java.lang.Long cannot be cast to Venue 
Descriptor: RelationalDescriptor(Menu --> [DatabaseTable(Menus)]) 
    VenuesWSrvc.deleteMenu(VenuesWSrvc.java:273) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:497) 
    org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1081) 
    org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1153) 
    com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:4695) 
    com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:630) 
    com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) 
    com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:582) 
    org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:46) 
    sun.reflect.GeneratedMethodAccessor75.invoke(Unknown Source) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:497) 
    com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) 
    com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) 
    com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:582) 
    com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163) 
    com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:140) 
    sun.reflect.GeneratedMethodAccessor77.invoke(Unknown Source) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:497) 
    com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) 
    com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) 
    com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:369) 
    com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:4667) 
    com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4655) 
    com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212) 
    com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88) 
    com.sun.proxy.$Proxy230.deleteMenu(Unknown Source) 
    WebServiceFilter.doFilter(WebServiceFilter.java:139) 
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) 
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) 
    WebAuthFilter.doFilter(WebAuthFilter.java:186) 
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) 
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) 
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316) 
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) 
    org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) 
    org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) 
    com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) 
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) 
    org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260) 
    com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188) 
    org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191) 
    org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168) 
    org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189) 
    org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288) 
    org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) 
    org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136) 
    org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114) 
    org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
    org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838) 
    org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113) 
    org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115) 
    org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) 
    org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135) 
    org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564) 
    org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544) 
    java.lang.Thread.run(Thread.java:745) 
----- 
java.lang.ClassCastException: java.lang.Long cannot be cast to Venue 
    VenuesWSrvc.deleteMenu(VenuesWSrvc.java:273) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:497) 
    org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1081) 
    org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1153) 
    com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:4695) 
    com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:630) 
    com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) 
    com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:582) 
    org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:46) 
    sun.reflect.GeneratedMethodAccessor75.invoke(Unknown Source) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:497) 
    com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) 
    com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) 
    com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:582) 
    com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163) 
    com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:140) 
    sun.reflect.GeneratedMethodAccessor77.invoke(Unknown Source) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:497) 
    com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) 
    com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) 
    com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:369) 
    com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:4667) 
    com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4655) 
    com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212) 
    com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88) 
    com.sun.proxy.$Proxy230.deleteMenu(Unknown Source) 
    WebServiceFilter.doFilter(WebServiceFilter.java:139) 
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) 
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) 
    WebAuthFilter.doFilter(WebAuthFilter.java:186) 
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) 
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) 
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316) 
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) 
    org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) 
    org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) 
    com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) 
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) 
    org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260) 
    com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188) 
    org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191) 
    org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168) 
    org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189) 
    org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288) 
    org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) 
    org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136) 
    org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114) 
    org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
    org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838) 
    org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113) 
    org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115) 
    org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) 
    org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135) 
    org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564) 
    org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544) 
    java.lang.Thread.run(Thread.java:745) 
----- 
, 1, Failed to retrieve Menus, 1465220776471, /ws/deleteMenu, 3] 
2016-06-06T16:46:16.477+0300|Fine: SELECT LAST_INSERT_ID() 
2016-06-06T16:46:16.503+0300|Severe: javax.servlet.ServletException: Error invoking WebService: 'deleteMenu' 
    at WebServiceFilter.doFilter(WebServiceFilter.java:276) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) 
    at WebAuthFilter.doFilter(WebAuthFilter.java:186) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) 
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188) 
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168) 
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838) 
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: ServiceException: Exception [EclipseLink-202] (Eclipse Persistence Services - 2.6.3.v20160428-59c81c5): org.eclipse.persistence.exceptions.DescriptorException 
Exception Description: An internal error occurred accessing the primary key object [[email protected]]. 
Internal Exception: java.lang.ClassCastException: java.lang.Long cannot be cast to Venue 
Descriptor: RelationalDescriptor(Menu --> [DatabaseTable(Menus)]) 
    at VenuesWSrvc.deleteMenu(VenuesWSrvc.java:273) 
    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:497) 
    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:4695) 
    at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:630) 
    at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) 
    at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:582) 
    at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:46) 
    at sun.reflect.GeneratedMethodAccessor75.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    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:582) 
    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.GeneratedMethodAccessor77.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    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:4667) 
    at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4655) 
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212) 
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88) 
    at com.sun.proxy.$Proxy230.deleteMenu(Unknown Source) 
    at WebServiceFilter.doFilter(WebServiceFilter.java:139) 
    ... 31 more 
Caused by: Exception [EclipseLink-202] (Eclipse Persistence Services - 2.6.3.v20160428-59c81c5): org.eclipse.persistence.exceptions.DescriptorException 
Exception Description: An internal error occurred accessing the primary key object [[email protected]]. 
Internal Exception: java.lang.ClassCastException: java.lang.Long cannot be cast to Venue 
Descriptor: RelationalDescriptor(Menu --> [DatabaseTable(Menus)]) 
    at org.eclipse.persistence.exceptions.DescriptorException.errorUsingPrimaryKey(DescriptorException.java:1937) 
    at org.eclipse.persistence.internal.jpa.CMP3Policy.createBeanUsingKey(CMP3Policy.java:342) 
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.getReference(UnitOfWorkImpl.java:5909) 
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.getReference(EntityManagerImpl.java:1405) 
    at com.sun.enterprise.container.common.impl.EntityManagerWrapper.getReference(EntityManagerWrapper.java:418) 
    at VenuesWSrvc.deleteMenu(VenuesWSrvc.java:263) 
    ... 62 more 
Caused by: java.lang.ClassCastException: java.lang.Long cannot be cast to Venue 
    at Menu._persistence_set(Menu.java) 
    at org.eclipse.persistence.internal.descriptors.PersistenceObjectAttributeAccessor.setAttributeValueInObject(PersistenceObjectAttributeAccessor.java:102) 
    at org.eclipse.persistence.mappings.DatabaseMapping.setAttributeValueInObject(DatabaseMapping.java:1652) 
    at org.eclipse.persistence.internal.indirection.IndirectionPolicy.setRealAttributeValueInObject(IndirectionPolicy.java:340) 
    at org.eclipse.persistence.mappings.ForeignReferenceMapping.setRealAttributeValueInObject(ForeignReferenceMapping.java:1683) 
    at org.eclipse.persistence.internal.jpa.CMP3Policy.creat 
2016-06-06T16:46:16.503+0300|Severe: eBeanUsingKey(CMP3Policy.java:338) 
    ... 66 more 


Hier ist meine Venue Einheit

@Entity 
@Table(name="Venues") 
public class Venue implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name = "id") 
    private long venueId; 

    @OneToMany(mappedBy="venue") 
    private List<Menu> menus; 
} 


Und eine andere, die Menüs stellt dar, dass ein Ort

@Entity 
@Table(name="Menus") 
@IdClass(MenuPK.class) 
public class Menu implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @ManyToOne 
    @JoinColumn(name="venueId") 
    private Venue venue; 

    @Id 
    @Min(value=1) 
    private short menuId; 
} 


Dies ist die PK-Klasse für Menüs können

public class MenuPK implements Serializable { 
    private static final long serialVersionUID = 1L; 

    private long venue; 
    private short menuId; 

    public MenuPK() { 
    } 
    public MenuPK(long venueId, short menuId) { 
     this.venue = venueId; 
     this.menuId = menuId; 
    } 

    public long getVenue() { 
     return this.venue; 
    } 
    public short getMenuId() { 
     return this.menuId; 
    } 

    public boolean equals(Object other) { 
     if (this == other) { 
      return true; 
     } 
     if (!(other instanceof MenuPK)) { 
      return false; 
     } 
     MenuPK castOther = (MenuPK)other; 
     return 
      (this.venue == castOther.venue) && 
      (this.menuId == castOther.menuId); 
    } 

    public int hashCode() { 
     final int prime = 31; 
     int hash = 17; 
     hash = hash * prime + (int)(this.venue^(this.venue >>> 32)); // taken from the hashCode() implementation of java.lang.Long 
     hash = hash * prime + ((int) this.menuId); 

     return hash; 
    } 
} 

Antwort

-1

Die Arten der Primärschlüssel des Unternehmens Menü sind:

  • lange Veranstaltungsort
  • kurze menuId

Die Typen der Klasse, die den Primärschlüssel darstellen, sind:

  • Ort Veranstaltungsort
  • kurz menuId

Das ist, warum Sie eine Classcast erhalten, wenn Sie versuchen, eine Einheit mit seiner PK

+0

Dies ist ein @ManyToOne @Id zu bekommen. Gemäß der JPA-Spezifikation muss der Datentyp "Venue" in der Klasse MenuPK mit dem Datentyp des @Id-Feldes in der Klasse Venue übereinstimmen (und nicht vom Typ Venue selbst sein). Beachten Sie, dass der obige Code mit 'em.find()' anstelle von 'em.getReference' funktioniert, die beide die MenuPK-Klasse verwenden. – DTs