Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Hibernacja> CLOB> Oracle :(

Dziękuję non sequitor za wszelką pomoc. Mam to w pracy i wymyślę, że umieszczę tutaj wszystkie elementy do wykorzystania w przyszłości. Bez względu na wszystkie twierdzenia o modernizacji sterowników i wszystko by zadziałało, nic z tego nie zadziałało dla mnie. W końcu musiałem zaimplementować 'org.hibernate.usertype.UserType' nazwałem go tak samo jak wszystkie przykłady w sieci StringClobType. Zaoszczędź dla niektórych importów. Użyłem przykładu z Using Clobs/Blobs z Oracle i Hibernate. Jeśli o mnie chodzi, zignoruj ​​twierdzenie „uważaj”.

Była jedna zmiana, którą musiałem wprowadzić, aby scalanie działało. Niektóre metody nie zostały zaimplementowane w dostarczonej próbce kodu. Eclipse naprawiło to dla mnie, dławiąc je. Fajnie, ale metoda replace musi być faktycznie zaimplementowana, w przeciwnym razie wszystkie scalenia zastąpią dane wartością null. Oto moja implementacja:

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

Nie będę duplikował implementacji klasy tutaj, przejdź do powyższego linku, aby to zobaczyć. Użyłem kodu w trzecim szarym polu. Następnie na górze klasy pojo, w której chciałem jej użyć, dodałem następujące po imporcie

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

Następnie, aby użyć nowego UserType, dodałem adnotację do mojego gettera:

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

Nie potrzebowałem adnotacji @Lob.
W moim pliku persistence.xml deklaracja persistence-jednostka kończy się w następujący sposób:

<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 nigdy nie działał dla mnie i nie był potrzebny do tej ostatecznej implementacji.

Moja lekcja jest taka, że ​​w końcu chyba lepiej dołączyć do walki. Zaoszczędziłoby mi to trzech dni.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy istnieje system kontroli wersji dla zmian struktury bazy danych?

  2. Typ daty bez czasu w Oracle

  3. Struktura i typy bloków Oracle PLSQL

  4. Co może powodować sporadyczne błędy ORA-12519 (TNS:nie znaleziono odpowiedniej obsługi)

  5. Łączenie kolumny przez grupę w R