2017-02-24 3 views
0

Groovy/Grailsの初心者の問題が増えています。ドメインクラスをJSONにシリアル化しようとするとGrailsのスタックオーバーフローエラーが発生する

私は私のドメインクラスの一つのインスタンスまたはそのドメインクラスのインスタンスのArrayListのをシリアル化する複数の方法を試してみましたが、2.5.1

Groovyのバージョン2.4.8 Grailsのバージョン。

単一のインスタンスをシリアル化しようとすると、スタックオーバーフローエラーが発生します。

class Advisor { 
    String firstName 
    String lastName 
    String fullName 
    String city 
    String state 
    Firm firm 
    static belongsTo = [Case, Firm] 
    static hasMany = [cases:Case] 
    static constraints = { 
    } 
} 


class Case { 
    String caseCode 
    String internalComment 
    String externalComment 
    Date dateCreated 
    String createdBy 
    Date dateUpdated 
    String updatedBy 

    static belongsTo = [owner:User, caseStatusType:CaseStatusType] 
    static hasMany = [advisor:Advisor] 
    static mapping = { 
     dateCreated sqlType: "date" 
     dateUpdated sqlType: "date" 
    } 
    static constraints = { 
     dateCreated(nullabe: false) 
     dateUpdated(nullable: false) 
    } 
} 

class Firm { 
    String name 
    static constraints = { 
    } 
} 

編集:コードとスタックトレースが

def getAdvisors(String keystrokes, String firm) { 
    def advisors = priceBlotterService.advisorsForKeystrokes(keystrokes, "", 30) 
    def a1 = advisors[0] 
    def json = JsonOutput.toJson(a1) 
} 

Caused by InvocationTargetException: null 
->> 198 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|  63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter 
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor 
| 615 | run  in java.util.concurrent.ThreadPoolExecutor$Worker 
^ 745 | run . . . in java.lang.Thread 
Caused by StackOverflowError: null 
->> 100 | invoke in org.codehaus.groovy.reflection.CachedMethod 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|  62 | getProperty in groovy.lang.MetaBeanProperty 
|  42 | getValue in groovy.lang.PropertyValue 
| 388 | getProperties in  org.codehaus.groovy.runtime.DefaultGroovyMethods 
| 290 | writeObject in groovy.json.JsonOutput 
| 329 | writeArray in  '' 
| 286 | writeObject in  '' 
| 424 | writeMap in  '' 
| 294 | writeObject in  '' 
| 329 | writeArray in  '' 
| 286 | writeObject in  '' 
| 424 | writeMap in  '' 

顧問、ケース、と企業クラスの下に表示され

I /私のドメインクラスの基本的な問題を発見しましたこれと何か関係があり、解決する必要があるテーブル。

私はユーザーテーブルから簡単に取得しようとすると、IDフィールドがないことを示すエラーメッセージが表示されます。何が起こっているのか把握するのに苦労している。詳細は以下の通りです。

コードの行

User[] users = User.findAll() 

エラーメッセージ

org.springframework.jdbc.BadSqlGrammarException: Hibernate operation: could not extract ResultSet; bad SQL grammar [n/a]; nested exception is org.postgresql.util.PSQLException: ERROR: column this_.id does not exist Position: 8 

Userクラス

class User { 
    String firstName 
    String lastName 

    static constraints = { 
    } 
} 

ユーザ・テーブルのDDL

CREATE TABLE "user" 
(
    id BIGINT DEFAULT nextval('user_id_seq'::regclass) PRIMARY KEY NOT NULL, 
    first_name VARCHAR(30), 
    last_name VARCHAR(30), 
    version BIGINT 
); 
CREATE UNIQUE INDEX user_id_uindex ON "user" (id); 

編集:

ユーザーテーブル/クラスの固定発行者。 UserはPostresqlのキーワードなので、EndUserにリファクタリングしました。

+0

は、あなたのケースと企業クラスの詳細を投稿することができますか? – LeslieV

+0

@LeslieV OK、ありがとう! – NewDev

答えて

1

データ構造に問題があり、JSON Builderが無限ループに陥っている可能性があります。

あなたは、日付の問題に関する情報については、これを確認したいことがあります。https://issues.apache.org/jira/browse/GROOVY-7682

これは、代わりに働く可能性があります

import grails.converters.JSON 
def json = new JSON(a1) 
+0

ありがとう、まだ動作していない、私はエラー 'メソッドが投げた 'java.lang.RuntimeExceptionの例外を取得します。 grails.converters.JSON.toString() 'を評価できません。私は別の問題を発見したが、それは非常に基本的なので、私はそれに焦点を当てるべきだと思う。他のエラーは、Userクラス/テーブルで何か問題があります。私は何らかの理由でテーブルから何かを引くことができない、私は元の質問に情報を追加します。 – NewDev

関連する問題