sql >> Databasteknik >  >> RDS >> Oracle

Hibernate> CLOB> Oracle :(

Tack till non sequitor för all hjälp. Jag har det här fungerande och jag kommer att lägga alla bitarna här för framtida referens. Oavsett alla påståenden om att uppgradera drivrutinerna och att allt skulle fungera, så fungerade inget av det för mig. Till slut var jag tvungen att implementera en 'org.hibernate.usertype.UserType' jag döpte den till samma som alla exempel på webben StringClobType. Med undantag för vissa importer använde jag exemplet från Using Clobs/Blobs med Oracle och Hibernate. Såvitt jag är orolig ignorera "akta dig"-påståendet.

Det var en förändring jag var tvungen att göra för att få sammanslagningar att fungera. Vissa av metoderna implementerades inte i det medföljande kodexemplet. Eclipse fixade det åt mig genom att stoppa ut dem. Coolt, men ersättsmetoden måste faktiskt implementeras, annars kommer alla sammanslagningar att skriva över data med en null. Här är min implementering:

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

Jag kommer inte att duplicera klassimplementeringen här, gå till länken ovan för att se den. Jag använde koden i den tredje grå rutan. Sedan högst upp i pojoklassen jag ville använda den i lade jag till följande efter importerna

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

Sedan för att använda den nya UserTypen lade jag till annoteringen i min getter:

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

Jag behövde inte @Lob-kommentaren.
I min persistence.xml slutade persistence-unit-deklarationen att se ut så här:

<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 fungerade aldrig för mig och behövdes inte för denna slutgiltiga implementering.

Min läxa är att i slutändan är det nog bättre att gå med sedan för att slåss. Det skulle ha räddat mig tre dagar.



  1. Sammansatt primärnyckel i django

  2. Entity Framework core - Innehåller är skiftlägeskänsligt eller skiftlägesokänsligt?

  3. Anonymisera dina plandetaljer inbyggt i Plan Explorer

  4. Få MySQL-databasutdata via PHP till XML