sql >> Databáze >  >> RDS >> Oracle

Hibernace> CLOB> Oracle :(

Díky non sequitor za veškerou pomoc. Mám to funkční a myslím, že sem dám všechny kusy pro budoucí použití. Bez ohledu na všechna tvrzení o upgradu ovladačů a vše by fungovalo, nic z toho mi nefungovalo. Nakonec jsem musel implementovat 'org.hibernate.usertype.UserType', pojmenoval jsem to stejně jako všechny příklady na webu StringClobType. S výjimkou některých importů jsem použil příklad z použití Clobs/Blobs s Oracle a Hibernate. Pokud jde o mě, ignorujte tvrzení „pozor“.

Musel jsem udělat jednu změnu, aby sloučení fungovala. Některé metody nebyly implementovány v poskytnuté ukázce kódu. Eclipse to za mě vyřešil tím, že je vytlačil. Skvělé, ale metoda nahrazení musí být skutečně implementována, jinak všechna sloučení přepíší data nulou. Zde je moje implementace:

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

Nebudu duplikovat implementaci třídy, přejděte na výše uvedený odkaz a podívejte se na to. Použil jsem kód ve třetím šedém poli. Potom na vrchol třídy pojo, ve které jsem ji chtěl použít, jsem po importech přidal následující

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

Poté, abych použil nový UserType, přidal jsem do svého getteru anotaci:

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

Nepotřeboval jsem anotaci @Lob.
V mém persistence.xml deklarace persistence-unit skončila takto:

<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 mi nikdy nefungoval a nebyl pro tuto finální implementaci potřeba.

Moje poučení je, že nakonec je pravděpodobně lepší se připojit, než bojovat. Ušetřilo by mi to tři dny.



  1. Jak EXP() funguje v MariaDB

  2. Příkaz CASE WHEN pro klauzuli ORDER BY

  3. PostgreSQL CREATE TABLE

  4. Propojte metabázi s MySQL pro průzkum dat