2016-05-30 5 views
0
//i use ajax, spring mvc , hibernate-jpa 

が、私はこれらのエラーログを取得していないセッションは、コンテンツを書き込むことができませんでした:プロキシ初期化できませんでした - のページを表示するとき

クーデ​​ターHTTP 500 - コンテンツを書き込めませんでした:なまけ役割のコレクションを初期化に失敗しました:組織を.service.pf.entities.Categorie.souscategorie、プロキシを初期化できませんでした - セッションなし(参照チェーンを通じて:java.util.ArrayList [0] - > org.service.pf.entities.Souscategorie ["categorie"] - > org .service.pf.entities.Categorie ["souscategorie"]);ネストされた例外はcom.fasterxml.jackson.databind.JsonMappingExceptionです:ロールのコレクションを遅延して初期化できませんでした:org.service.pf.entities.Categorie.souscategorie、プロキシを初期化できませんでした - セッションなし(参照チェーン経由:java.util。 ArrayListの[0] - > org.service.pf.entities.Souscategorie [ "categorie"] - > org.service.pf.entities.Categorie [ "souscategorie"])アクセスしようとしている

//my controller 

    @RequestMapping(value="/filtrecatgajax") 
    @ResponseBody 
    public List<Souscategorie> getAllProductByKategori(@RequestParam(value = "id", required = true) String id ){ 

    return metiersr.SouscategoriesParCategorie((long) Integer.parseInt(id)); 
} 

//My dao function 

public class ServicedaoImpl implements Servicedao { 
@PersistenceContext 

    @Override 
    public List<Souscategorie> SouscategoriesParCategorie(Long idCat) { 
    Query query = em 
      .createQuery("SELECT p FROM Souscategorie p WHERE p.categorie.id=:x"); 
    query.setParameter("x", idCat); 
    return query.getResultList(); 

} 
} 

//Relation OneToMany 

     @OneToMany(mappedBy = "categorie") 
     private Collection<Souscategorie> souscategorie; 

//Relation ManyToOne 

     @ManyToOne 
     @JoinColumn(name = "categorie_id") 
     private Categorie categorie; 

    Can someone help me ! 

答えて

0

コレクションHibernateのセッションから抜け出すデータはあなたがあなたのエンティティの列にFetchType.LAZYを設定し、関連オブジェクトを引っ張っずにオブジェクトを取得することができ、親エンティティ

+0

@OneToMany(mappedBy = "categorie"、fetch = FetchType.EAGER)私はJackson JSONで無限再帰を持っています! – Raki

+0

@JsonIgnoreを使用して再帰サイクルを停止することができます – Stan

+0

フェッチタイプを遅延として使用する場合はどうすればよいですか? – masSdev

1

をロードしているものをロードされますので、

@OneToMany(mappedBy = "categorie", fetch = FetchType.EAGER) 

としてあなたの関係を定義するようにしてください。ここで私は春の休憩

問題文

を、4休止状態、春のMVC 4を使用しています、私はどのように

である私は、データベースからAnswer_tbl Entityオブジェクトを取得したかったが、私は例外を取得

コンテンツを書き込めませんでした:プロキシ初期化できませんでした - 参照チェーンを通じて無セッション を

私はサービスhttp://localhost:8080/myapp/rest/answer/2を呼ばれると、エンティティクラス

@Entity 
@Table(name = "Answer") 
public class Answer_tbl implements Serializable { 

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

    @ManyToOne(optional = false, fetch = FetchType.LAZY) 
    @JoinColumn(name="QuestionId") 
    private Question_tbl question; 

    @ManyToOne(optional = false, fetch = FetchType.LAZY) 
    @JoinColumn(name="ShaikhId") 
    private Shaikh_tbl shaikh; 

    // getters and setters 

回答マイは、あなたと同じ例外が発生しました。

問題は実際にはFetchType.lazyです。 JacksonはAnswer_tblエンティティを変換しようとすると、関連付けられたオブジェクト(Question_tbl & Shaikh_tbl)をロードしようとしますが、休止状態のセッションは閉じられます。

ソリューション

一つの解決策は、熱心に関連付けをロードします休止、その後、fetch = FetchType.LAZYを削除することです。しかし、それはあなたが探しているものではありません。

2番目の解決方法は、遅延読み込み機能を処理できるJackson JSONプロセッサを使用することです。ここで

が手順です

は、あなたの春のXML Configで

<mvc:annotation-driven> 
    <mvc:message-converters> 
     <!-- Use the HibernateAware mapper instead of the default --> 
     <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
      <property name="objectMapper"> 
       <bean class="path.to.your.HibernateAwareObjectMapper" /> 
      </property> 
     </bean> 
    </mvc:message-converters> 
</mvc:annotation-driven> 
を次のコードを追加しますObjectMapper

public class HibernateAwareObjectMapper extends ObjectMapper { 

    public HibernateAwareObjectMapper() { 
     registerModule(new Hibernate4Module()); 
    } 

} 

でモジュールを登録し

<dependency> 
    <groupId>com.fasterxml.jackson.datatype</groupId> 
    <artifactId>jackson-datatype-hibernate4</artifactId> 
    <version>2.5.3</version> 
</dependency> 

次のMavenの依存関係を追加します。

サービスhttp://localhost:8080/myapp/rest/answer/2を呼び出すと、次のJSONが取得されます。関連付けは取得されず、Answer_tblオブジェクトのみが使用可能です。ここで

{ 
    "id": 2, 
    "question": null, 
    "shaikh": null, 
    "solution": "testing...", 
} 

GitのリンクFasterXML-Jackson-Datatype-Hibernate

が、これは参考になるの希望です。

+0

それは動作します!再帰サイクルを停止するために@JsonIgnoreを使用することを検討してください –

+0

私の答えがあなたを助けてくれてうれしいです:) – STK

関連する問題