2016-07-10 8 views
2

Angenommen, ich habe bereits eine Klasse gemacht, die ich beibehalten möchte. Ich kann den Code nicht ändern, d. H. Ich kann keine Anmerkungen einfügen. Außerdem folgt die Klasse nicht der Bean-Konvention.Ist es möglich, benutzerdefinierte endgültige Klassen im Ruhezustand zuzuordnen?

I.e. Es ist eine willkürliche komplexe Klasse, die ich beibehalten möchte.

Ist es möglich, eine Art von benutzerdefinierten Serialisierer und Deserializer (ich weiß nicht, wie es zu benennen) in Hibernate schreiben, so dass ich in der Lage, diese Klassen wie üblich POJOs lesen?

+0

die letzte Klasse implementiert serializable? –

+0

@PaulWasilewski da Sie es in Blob serialisieren möchten, dann nein :) – Dims

+0

Dann denke ich, die einzige verbleibende Option ist die Karte der Klasse. –

Antwort

0

Hallo die erste Frage ist kann ich eine "Fina-Klasse" zuordnen die Antwort auf diese Frage ist JA, solange Sie nicht Hibernate Enchancing oder irgendeine Art von Instrumentierung verwenden.

Jetzt zweite Frage. Bean folgt Bean Conventions nicht. Ich denke, das bedeutet keine Getter und Setter. Sie können Zugriff auf Attributebene haben, dies ist also kein Problem.

Ist es möglich, benutzerdefinierte Serializer in Hibernate zu schreiben. Die Antwort hier ist NEIN. Warum ? Da es sich bei Hibernate nicht um Serialisierung handelt, geht es beim Hibernate um SQL. Es gibt keine strenge Anforderung, dass eine Hibernate Entity serialisiert werden sollte.

Obwohl Hibernate Serialisierung nicht erzwingt. Kann ich meine letzte Klasse serialisieren-fähig machen, obwohl sie nicht Serializable oder Eternalizeable implementiert. Ja, Sie müssen es in eine Klasse einfügen, die Serializable oder Externalizeable implementiert, und die doRead doWrite-Methoden selbst implementieren.

Serialisierung zu JSON oder XML - Dies ist nicht Teil von Hibernate und gehört nicht zu JPA. Die Serialisierung für diese beiden Formate ist als Teil der Jaxb- und Jax-rs-Spezifikationen definiert.

+0

Sieht aus, als hätten wir ein Missverständnis. JSON und XML wurden als Beispiel genommen, wo wir benutzerdefinierte Klassen schreiben können, um strukturierte Daten zu lesen und zu schreiben. Ähnliches wäre im Ruhezustand gut: Lese und schreibe benutzerdefinierte Klasse von/nach Datenbanktabelle. – Dims

0

Werfen Sie einen Blick auf Hibernate UserType und CompositeUserType, mit den gut EnumUserType example

Aufzählungen bekannt, ein bisschen wie Ihre Bedürfnisse: final Klasse, keine Getter noch Setter. Sie sind jedoch nicht komplex, so dass Sie möglicherweise eine CompositeUserType benötigen, die es ermöglicht, mehrere Spalten für einen Typ zuzuordnen, eher als UserType.

Dann würden Sie es so, dass in Ihrer Klasse verwenden:

public class MyClass { 
    @Id 
    private Long id; 

    @Type(type = "com...MyCompositeUserType") 
    private ComplexFinalClassNotPojo complexObject; 
} 
+0

Sieht so aus, als ob das nur für Felder funktioniert. Ich würde gerne ganze 'MyClass' von Ihnen ohne Beispiel hinzufügen, ohne Anmerkungen hinzuzufügen. – Dims

+0

die Klasse, die Sie nicht besitzen und nicht ändern können, ist ComplexFinalClassNotPojo in meinem Beispiel. Dank CompositeUserType können Sie es mehreren Datenbankfeldern zuordnen (alle Spalten der Tabelle der MyClass, aber die Spalte "ID"). MyClass ist Code, den Sie besitzen und in Ihrem Projekt deklarieren. MyClass würde nur den Tabellennamen und die ID-Definition enthalten, die einem Benutzer basierend auf dem internen Status 'complexObject' eine '@ Id' zuweisen könnte. – Thierry

Verwandte Themen