sql >> データベース >  >> RDS >> Mysql

Hibernate-ロールのコレクションを遅延初期化できませんでした:beans.Language.patients、プロキシを初期化できませんでした-セッションなし

    jsonコンバーターは、各言語を話すすべての患者のリストを含むエンティティ全体をシリアル化しようとします。私が理解したことから、jsonの患者のリストは期待されていません。したがって、3つのオプションがあります(私がそれらを検討する順序で):

    • Languageエンティティの患者へのマッピングを削除します。言語エンティティから患者にアクセスする必要がありますか?このマッピングを削除しない場合。
    • txレイヤーを終了する前にデータを転送する言語DTOを作成します。このように、サービスを呼び出す人は誰でもLazyInitExceptionを取得することはありません。当然のことながら、DTOフィールドは常に熱心に設定されています。
    • 患者フィールドをシリアル化しないようにjsonコンバーターを構成します。使用しているjsonlibはまだ言っていません。それらのいくつかは、いくつかのフィールドを無視するための注釈を提供します(@JsonIgnore たとえば、Jacksonの場合)、その他にはJava構成が必要です。

    最初の解決策を適用するには、これらのファイルを次のように更新します:

    Language.hbm.xml

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <!-- Generated Sep 14, 2016 4:33:23 PM by Hibernate Tools 4.3.1 -->
    <hibernate-mapping>
        <class name="beans.Language" table="language" catalog="myglukose" optimistic-lock="version">
            <id name="idlanguage" type="java.lang.Integer">
                <column name="idlanguage" />
                <generator class="identity" />
            </id>
            <property name="language" type="string">
                <column name="language" length="45" not-null="true" />
            </property>
        </class>
    </hibernate-mapping>
    

    Language.java

    public class Language  implements java.io.Serializable {
        private Integer idlanguage;
        private String language;
    
        protected Language() {
        }
    
    
        public Language(String language) {
            this.language = language;
        }
    
        public Integer getIdlanguage() {
            return this.idlanguage;
        }
    
        protected void setIdlanguage(Integer idlanguage) {
            this.idlanguage = idlanguage;
        }
        public String getLanguage() {
            return this.language;
        }
    
        public void setLanguage(String language) {
            this.language = language;
        }
    }
    

    引数なしのコンストラクターとsetIdを更新しました protectedへのメソッド 。それらをprivateに更新することもできます :休止状態のみがそれらを使用する必要があります(プライベートフィールド/メソッドを使用できます)。



    1. 名前にスペースが含まれるmysqlでデータベースを選択する

    2. postgres json列のネストされた配列をクエリする方法は?

    3. 論理レプリケーションソリューションのパフォーマンス制限

    4. Oracleストアドプロシージャを実行する方法は?