Благодаря на non sequitor за цялата помощ. Това работи и смятам, че ще сложа всички части тук за бъдещи справки. Независимо от всички твърдения за надграждане на драйверите и всичко ще работи, нищо от това не ми свърши работа. В крайна сметка трябваше да внедря 'org.hibernate.usertype.UserType', кръстих го по същия начин като всички примери в мрежата StringClobType. Запазете за някои импортирания. Използвах примера от Използване на Clobs/Blobs с Oracle и Hibernate. Що се отнася до мен, игнорирайте твърдението „пазете се“.
Имаше една промяна, която трябваше да направя, за да накарам сливанията да работят. Някои от методите не бяха внедрени в предоставения примерен код. Eclipse го оправи вместо мен, като ги изтри. Страхотно, но методът за замяна трябва действително да бъде приложен или всички сливания ще презапишат данните с нула. Ето моята реализация:
public Object replace(Object newValue, Object existingValue, Object arg2)throws HibernateException {
return newValue;
}
Няма да дублирам реализацията на класа тук, отидете на горната връзка, за да я видите. Използвах кода в третото сиво поле. След това в горната част на класа 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, добавих анотацията към моя getter:
@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 никога не е работил за мен и не е бил необходим за тази окончателна реализация.
Моят урок е, че в крайна сметка вероятно е по-добре да се присъедините, отколкото да се биете. Щеше да ми спести три дни.