7

さて、私は Hibernate を使用して、テーブルを表すいくつかのクラスに小さなデータベースをロードし、データベースと対話しています。すべて問題なく、実際にすべての結果を確認できます...そして、null フィールドはありません。それらはすべて使用されています。

ここでは、「メイン」クラス (表) を示します。

    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;

    import org.codehaus.jackson.annotate.JsonAutoDetect;
    import org.codehaus.jackson.annotate.JsonProperty;

    @JsonAutoDetect
    public class Advertisement {

      @Id
      @GeneratedValue(strategy=GenerationType.AUTO)
      public int id;
      public SessionT session;
      public int idRoom;
      public String image;

      public Advertisement() {

      }

      /* Getters and Setters */
      @JsonProperty
      public int getID() /* Get example */ {
          return this.id;
      }
    }

また、

    @JsonAutoDetect
    public class SessionT {

      @Id
      @GeneratedValue(strategy=GenerationType.AUTO)
      public int id;
      public int iStatus;
      public String sStatus;
      public Date dtDateStart;
      public Date dtDateEnd;
      public boolean bhide;

      /* Constructor, Getter and Setters*/
    }

私の目的は、広告のリストから JSON を生成し、HTTP 経由で送信することです。

ObjectMapper mapper = new ObjectMapper();System.out.println("mapper started!");
mapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);
response.getOutputStream().println(mapper.writeValueAsString(ads));

そして、何らかの理由で次のエラーが発生します。

org.codehaus.jackson.map.JsonMappingException: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: java.util.ArrayList[0]->entities.slave.Advertisement["session"]->entities.slave.SessionT_$$_javassist_2["hibernateLazyInitializer"])

jackson-all-1.9.11 と JBoss Studios 6.01 を使用しています

誰でも私を助けることができますか??

4

4 に答える 4

23

で試すことができますか

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})

または、かなり単純なアプローチは、各ゲッターに @JsonProperty で手動で注釈を付けることです

于 2013-08-27T16:08:46.863 に答える
2

Hibernate が DB からオブジェクトをロードすると、Advertisment や SessionT のように見えるプロキシ化されたオブジェクトが返されますが、より多くの「もの」が含まれています (セッションとの関係、遅延ロードされたコレクションの内部状態などを処理するため)。

これは、オブジェクトのプロパティを見つけるためにイントロスペクションに依存しているため、Jackson シリアライザーをスローします。

Jackson が Hibernate エンティティを操作できるようにするプロジェクトがあります。https://github.com/FasterXML/jackson-datatype-hibernateを参照してください。

于 2013-08-27T16:22:03.473 に答える