Wie man ein Clob in JPA in einer Implementierung agnostic Weise erstellt
Ich bin mit Ejb3 und JPA (basierend auf Hibernate und Oracle 10g im moment)
Habe ich eine Entität mit einem clob -
@Entity
@Table(name = "My_TAB")
public class ExampleEntity implements java.io.Serializable {
private Clob someText;
public void setSomeText(Clob someText) {
this.someText= someText;
}
@Column(name = "COLUMN_NAME")
public Clob getSomeText() {
return this.someText;
}
Dann will ich speichern einer Entität dieses Typs.
Im moment bin ich dabei die folgende, die Werke perfekt
ExampleEntity exampleEntity = new ExampleEntity();
exampleEntity.setSomeText(Hibernate.createClob(aStringValue));
someOtherDao.save(exampleEntity);
Jedoch diese Beziehungen, meinen code zu Überwintern! Ich habe ausdrücklich vermieden, so weit Hibernate-extensions und nur benutzt JPA Annotationen. Der code funktioniert, weil in der Tat Hibernate ist meine aktuelle Umsetzung.
Ist es eine Art von JPA-API, erlaubt mir, erstellen Sie einen clob in einer generischen Art und Weise? Also, wenn ich später entscheiden, zu wechseln, Toplink/EclipseLink, oder sonst etwas, ich will nicht ändern, was?
InformationsquelleAutor der Frage kazanaki | 2010-04-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es ein solches Beispiel ist die JPA spec (§ 9.1.5)
Ich glaube, es ist der standard-Weg für CLOB.
InformationsquelleAutor der Antwort ewernli
Ich bin mir nicht sicher, ich würde es wieder tun, aber in der Vergangenheit, wenn ich brauchte, um die Grenze meiner app auf die am häufigsten verwendete subset von sql-Typen, die ich umgesetzt binäre Objekte, die mit einer separaten Tabelle von char gespeichert und es gzipped und base 64-codiert. Mit XML-mapping, es war so etwas wie:
In den code, der getValue-Methode abgerufen werden getEncodedValue Ergebnisse, verkettet Sie alle zusammen und dann decodiert und entpackt Sie. Als Optimierung, habe ich eine einfache Spalte Wert in der übergeordneten Tabelle und verwendet, dass, wenn es passen könnte, in die 2000 Zeichen und ging nur an die untergeordnete Tabelle, wenn nötig.
Die setValue-Methode Gzip-codiert und gespeichert sind, in der einfach Spalte, wenn es passt, ansonsten ist es aufgeteilt in die untergeordneten Datensätze. Damit bekommt Ihr auch lazy loading und, wenn die Daten in einer einzelnen Spalte, es gar nicht zu tun haben, eine separate Abfrage.
Wohl des guten zuviel, wenn Sie wissen, dass Ihre Datenbanken Unterstützung clobs, aber funktionierte sehr gut in unsere situation.
InformationsquelleAutor der Antwort Brian Deterling