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.