2017-05-05 7 views
0

私は新しいドメインを作成し、テーブルを手動で作成しました。 テーブルには1つのレコードしか含まれていないので、唯一のレコードIDは(1)になります。Grails、レコードを取得する際のキャストエラー

レコードが存在しない場合は自動的に作成する必要がありますが、レコードを取得しようとすると常にキャストエラーが発生します。手動でレコードを手動で作成するかどうかは関係ありません。get、findなど、常にエラーになるものは何でも返されます。失敗

コード:

def int id = 1 
    def WtStatus wts = WtStatus.get(id)?:new WtStatus(id:1).save(failOnError:true) 

ドメイン:

class WtStatus { 
    def prodBufferService 
    int  weekUpdated 
    Date dateUpdated 

    def beforeInsert() { 
     dateUpdated = new Date() 
     weekUpdated = prodBufferService.getCurrentYearWeek() 
    } 
    def beforeUpdate() { 
     dateUpdated = new Date() 
    } 
    static constraints = { 
     dateUpdated  nullable:true 
     weekUpdated  nullable:true 
    } 

    static mapping = { 
     table 'wt_status' 
     version true 
     id    column: "id",    type:  'int' 
    } 

}

テーブルの作成スクリプト:

CREATE TABLE [dbo].[wt_status](
    [id] [int] NOT NULL, 
    [version] [bigint] NOT NULL, 
    [date_updated] [datetime2](7) NULL, 
    [week_updated] [int] NULL, 
CONSTRAINT [PK__wt_statu__3213E83F77809FC6] PRIMARY KEY CLUSTERED 
(
    [id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

STACKTRACE:

java.lang.Long cannot be cast to java.lang.Integer. Stacktrace follows: 

java.lang.reflect.InvocationTargetException: null 
    at org.grails.core.DefaultGrailsControllerClass$ReflectionInvoker.invoke(DefaultGrailsControllerClass.java:210) 
    at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:187) 
    at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
    at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115) 
    at grails.plugin.springsecurity.web.UpdateRequestContextHolderExceptionTranslationFilter.doFilter(UpdateRequestContextHolderExceptionTranslationFilter.groovy:64) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.groovy:53) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:158) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.groovy:62) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at grails.plugin.springsecurity.web.SecurityRequestHolderFilter.doFilter(SecurityRequestHolderFilter.groovy:58) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214) 
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) 
    at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77) 
    at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer 
    at org.hibernate.type.descriptor.java.IntegerTypeDescriptor.unwrap(IntegerTypeDescriptor.java:19) 
    at org.hibernate.type.descriptor.sql.IntegerTypeDescriptor$1.doBind(IntegerTypeDescriptor.java:46) 
    at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:74) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:253) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:248) 
    at org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:2051) 
    at org.hibernate.loader.Loader.bindParameterValues(Loader.java:2020) 
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1950) 
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1903) 
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1881) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:925) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:342) 
    at org.hibernate.loader.Loader.doList(Loader.java:2622) 
    at org.hibernate.loader.Loader.doList(Loader.java:2605) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2434) 
    at org.hibernate.loader.Loader.list(Loader.java:2429) 
    at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:109) 
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1787) 
    at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:363) 
    at org.hibernate.internal.CriteriaImpl.uniqueResult(CriteriaImpl.java:385) 
    at org.grails.orm.hibernate.AbstractHibernateGormStaticApi$_get_closure1.doCall(AbstractHibernateGormStaticApi.groovy:79) 
    at org.grails.orm.hibernate.GrailsHibernateTemplate.doExecute(GrailsHibernateTemplate.java:243) 
    at org.grails.orm.hibernate.GrailsHibernateTemplate.execute(GrailsHibernateTemplate.java:187) 
    at org.grails.orm.hibernate.GrailsHibernateTemplate.execute(GrailsHibernateTemplate.java:110) 
    at org.grails.orm.hibernate.AbstractHibernateGormStaticApi.get(AbstractHibernateGormStaticApi.groovy:75) 
    at org.grails.datastore.gorm.GormEntity$Trait$Helper.get(GormEntity.groovy:518) 
    at com.buffer.OrdersAndStoreController$$EQIjps9c.list(OrdersAndStoreController.groovy:29) 
    ... 37 common frames omitted 

答えて

1

ìd変数に使用するタイプは、問題はintです。ドメイン内でidプロパティを宣言していないので、Long(Grailsのデフォルト)になります。注:マッピングブロックでは、データベースとの関係となるものだけを定義します。そのため、ドメイン内のプロパティーはまだLongです。

また、変数に別のタイプを使用する場合は、defを使用する必要はありません。これを試してみてください:

Long id = 1 
WtStatus wts = WtStatus.get(id)?:new WtStatus(id:1).save(failOnError:true) 
+0

私はあなたが言ったことに気付いたので、あなたの解決策は機能しませんでした。私はまだ同じエラーが出ます。私はIDをintと宣言し、すべてが動作するようになりました。 – larand

1

複雑すぎます。またref-doc

あたりとして

WtStatus wts = WtStatus.findOrSaveById(id) 

、あなたがIntegerタイプのものであるとidフィールドを定義する必要がありexplicitelt:私は、何が本当にしたいことはあると思います。それ以外の場合、GORMはそれらをデフォルトでLongとして扱います。

+0

あなたが言ったことを正確に行いましたが、同じエラーが発生しました。上記の私の修正を参照してください: – larand

+0

上記の私のコメントをどのように修正したかを見てください。コードスニペットはとても良いです。私は今から使用しています。 – larand

関連する問題