2015-01-14 2 views
0

하나는 최대 절전 모드 지정이며 JPA 2.0 사양으로 지정되지 않았기 때문에 @Type 주석을 사용하고 싶지 않습니다.enum 유형에 대한 맵을 만드는 방법은 무엇입니까?

type_id 유형의 데이터베이스는 integer이며 내 데이터베이스에는 두 개의 다른 정수 값 : 1, 2 만있을 수 있습니다. 나는 열거 형을 만들었습니다

public enum ExternalTransactionType { 

    TO_LOTO(1), WITHDRAW(2); 

    private int value; 

    ExternalTransactionType(int value) { 
     this.value = value; 
    } 

    public String getName() { 
     return name(); 
    } 

    public int getValue() { 
     return value; 
    } 

    public static ExternalTransactionType getByValue(int value) { 
     for (ExternalTransactionType type : ExternalTransactionType.values()) { 
      if (value == type.getValue()) { 
       return type; 
      } 
     } 
     throw new IllegalArgumentException("Illegal value: " + value); 
    } 
} 

다음과 같이 매핑에 속성을 추가하려고 :

@Column(name="type_id") 
private Integer typeId; 

public ExternalTransactionType getType() { 
    return ExternalTransactionType.getByValue(typeId); 
} 

public void setType(ExternalTransactionType type) { 
    this.typeId = type.getValue(); 
} 

을하지만

criteria.add(Restrictions.eq("typeId", ExternalTransactionType.TO_LOTO)) 

같은 제한을 추가 할 때 ClassCastException가 Throw됩니다. 뭐가 문제 야?

java.lang.ClassCastException: ua.com.winforce.loto_partner.commons.db.entity.ExternalTransactionType cannot be cast to java.lang.Integer 
    org.hibernate.type.IntegerType.set(IntegerType.java:41) 
    org.hibernate.type.NullableType.nullSafeSet(NullableType.java:83) 
    org.hibernate.type.NullableType.nullSafeSet(NullableType.java:65) 
    org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1698) 
    org.hibernate.loader.Loader.bindParameterValues(Loader.java:1669) 
    org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1554) 
    org.hibernate.loader.Loader.doQuery(Loader.java:661) 
    org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224) 
    org.hibernate.loader.Loader.doList(Loader.java:2211) 
    org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2095) 
    org.hibernate.loader.Loader.list(Loader.java:2090) 
    org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:95) 
    org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569) 
    org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283) 
    ua.com.winforce.loto_partner.commons.db.dao.PlayersExternalTransactionDAOImpl.getNewRealPlayersCount(PlayersExternalTransactionDAOImpl.java:55) 
    ua.com.winforce.loto_partner.admin.db.service.ReportServiceImpl.getPartnerReport(ReportServiceImpl.java:627) 
    ua.com.winforce.loto_partner.admin.db.service.ReportServiceImpl.getPartnerReport(ReportServiceImpl.java:302) 
    ua.com.winforce.loto_partner.admin.db.service.ReportServiceImpl.getPartnerReport(ReportServiceImpl.java:309) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:606) 
    org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) 
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
    com.sun.proxy.$Proxy117.getPartnerReport(Unknown Source) 
    ua.com.winforce.loto_partner.admin.ui.panels.reports.PartnersReportController.doSearch(PartnersReportController.java:121) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:606) 
    org.apache.el.parser.AstValue.invoke(AstValue.java:278) 
    org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274) 
    com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68) 
    javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) 
    com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
    javax.faces.component.UICommand.broadcast(UICommand.java:387) 
    org.ajax4jsf.component.AjaxActionComponent.broadcast(AjaxActionComponent.java:55) 
    org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:324) 
    org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:299) 
    org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:256) 
    org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:469) 
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82) 
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) 
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:265) 
    org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178) 
    org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) 
    org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388) 
    org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378) 
    org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) 
    org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) 
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
    org.springframework.security.ui.SessionFixationProtectionFilter.doFilterHttp(SessionFixationProtectionFilter.java:67) 
    org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) 
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
    org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101) 
    org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) 
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
    org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91) 
    org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) 
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
    org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:277) 
    org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) 
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
    org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89) 
    org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) 
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
    org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235) 
    org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) 
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) 
    org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175) 
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236) 
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) 
    ua.com.winforce.loto_partner.admin.filter.EncodingFilter.doFilter(EncodingFilter.java:14) 
type_id 유형 Integer하지 Enum 일예로하기 때문에

답변

1

패스 정수 값보다는 열거 형

criteria.add(Restrictions.eq("typeId", ExternalTransactionType.TO_LOTO.getValue())) 
+0

그러나 setter의 인수 유형은'ExternalTransactionType'입니다. Integer와 올바르게 작동 할 예정입니까? –

+0

@ St.Antario 값을 다시 'Enum'으로 매핑해야합니다. – sol4me

+0

여전히 명확하지 않습니다. Integer를 eq 메서드에 전달했습니다. 정수가 어디로 전달 될까요? 세터? –

관련 문제