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

Hibernate> CLOB> Oracle :(

    すべての助けをくれた非sequitorに感謝します。私はこれを機能させており、将来の参考のためにすべてのピースをここに配置する予定です。ドライバーのアップグレードに関するすべての主張に関係なく、すべてが機能しますが、それは私にとってはうまくいきませんでした。最終的に、「org.hibernate.usertype.UserType」を実装する必要がありました。これは、WebStringClobTypeのすべての例と同じ名前を付けました。いくつかのインポートを除いて、OracleとHibernateでのClobs/Blobsの使用の例を使用しました。私に関する限り、「用心しなさい」という主張は無視してください。

    マージを機能させるために私がしなければならなかった変更が1つありました。一部のメソッドは、提供されているコードサンプルでは実装されていません。 Eclipseは、それらをスタブすることで修正してくれました。かっこいいですが、replaceメソッドを実際に実装する必要があります。そうしないと、すべてのマージによってデータがnullで上書きされます。これが私の実装です:

    public Object replace(Object newValue, Object existingValue, Object arg2)throws HibernateException {
        return newValue;
    }
    

    ここではクラスの実装を複製しません。上記のリンクにアクセスして確認してください。 3番目の灰色のボックスのコードを使用しました。次に、pojoクラスの先頭で、それを使用したかったので、インポート後に次を追加しました

    ...  
    import org.hibernate.annotations.Type;  
    import org.hibernate.annotations.TypeDefs;  
    import org.hibernate.annotations.TypeDef;  
    
    @TypeDefs({  
        @TypeDef(  
            name="clob",  
            typeClass = foo.StringClobType.class  
        )  
    })  
    @Entity  
    @Table(name="EA_COMMENTS")  
    public class Comment extends SWDataObject implements JSONString, Serializable {  
    ...  
    }   
    

    次に、新しいUserTypeを使用するために、ゲッターに注釈を追加しました。

    @Type(type="clob")
    @Column(name="COMMENT_DOC")
    public String getDocument(){
        return get("Document");
    }
    

    @Lobアノテーションは必要ありませんでした。
    persistence.xmlでは、persistence-unit宣言は次のように終了しました:

    <persistence-unit name="###" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.archive.autodetection" value="class"/> 
            <property name="hibernate.connection.password" value="###" />
            <property name="hibernate.connection.username" value="###" />
            <property name="hibernate.connection.url" value="jdbc:oracle:thin:@server.something.com:1521:###"/>
            <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/>
            <property name="hibernate.default_schema" value="###" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9iDialect" />
            <property name="hibernate.c3p0.min_size" value="5" />
            <property name="hibernate.c3p0.max_size" value="100" />
            <property name="hibernate.c3p0.timeout" value="300" />
            <property name="hibernate.c3p0.max_statements" value="50" />
            <property name="hibernate.c3p0.idle_test period" value="3000" />
            <property name="hibernate.c3p0.idle_connection_test_period" value="300" />
            <property name="show_sql" value="false" />
            <property name="format_sql" value="false" />
            <property name="use_sql_comments" value="false" />
            <property name="hibernate.jdbc.batch_size" value="0"/>
        </properties>
    </persistence-unit>
    

    SetBigStringTryClobは私には機能せず、この最終的な実装には必要ありませんでした。

    私が学んだ教訓は、最終的には参加して戦うほうがよいということです。 3日節約できたでしょう。



    1. Kubernetes AWSでのJenkinsの使用、パート1

    2. 2020年の計画でデータベース監視を優先する必要がある4つの理由

    3. ユーザーアカウントの管理、役割、権限、認証PHPおよびMySQL-パート5

    4. すべてのDBAが知っておくべき4つの主要なデータベース監視アクティビティ