Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Ruhezustand> CLOB> Oracle :(

Danke an non sequitor für all die Hilfe. Ich habe diese Arbeit und denke, ich werde alle Teile hier für zukünftige Referenz stellen. Ungeachtet aller Behauptungen über das Aktualisieren der Treiber und alles würde funktionieren, nichts davon hat bei mir funktioniert. Am Ende musste ich einen 'org.hibernate.usertype.UserType' implementieren, den ich genauso benannt habe wie alle Beispiele im Web StringClobType. Abgesehen von einigen Importen habe ich das Beispiel aus Using Clobs/Blobs with Oracle and Hibernate verwendet. Ignorieren Sie meiner Meinung nach die Behauptung "Vorsicht".

Es gab eine Änderung, die ich vornehmen musste, damit Merges funktionierten. Einige der Methoden wurden im bereitgestellten Codebeispiel nicht implementiert. Eclipse hat es für mich behoben, indem es sie ausgeblendet hat. Cool, aber die replace-Methode muss tatsächlich implementiert werden, sonst überschreiben alle Zusammenführungen die Daten mit einer Null. Hier ist meine Implementierung:

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

Ich werde die Klassenimplementierung hier nicht duplizieren. Gehen Sie zum obigen Link, um sie zu sehen. Ich habe den Code im dritten grauen Feld verwendet. Dann fügte ich oben in der Pojo-Klasse, in der ich es verwenden wollte, nach den Imports Folgendes hinzu

...  
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 {  
...  
}   

Um dann den neuen UserType zu verwenden, habe ich meinem Getter die Anmerkung hinzugefügt:

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

Ich brauchte die @Lob-Anmerkung nicht.
In meiner persistence.xml endete die Deklaration der Persistenzeinheit wie folgt:

<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>

Der SetBigStringTryClob hat bei mir nie funktioniert und wurde für diese endgültige Implementierung nicht benötigt.

Meine Lektion ist, dass es am Ende wahrscheinlich besser ist, sich anzuschließen, als zu kämpfen. Es hätte mir drei Tage gespart.