2012-11-12 2 views
5

W Railsach mamy metodę serialize, która przyjmuje atrybut (lub kolumnę), która zostanie automatycznie serializowana do json, gdy zostanie zapisana w bazie danych.Czy jest coś do hibernacji, który serializuje/deserializuje kolumnę json (lub xml) przekształcając ją w rzeczywiste atrybuty modelu?

Po zapisaniu obiektu i zapytaniu, obiekt serializowany json może być dostępny jako rzeczywiste atrybuty klas.

Moje pytanie brzmi: czy jest coś w pakiecie lub pakiet, który dodaje tę funkcję do hibernacji? Jeśli jest ujemny, czy możliwe jest dynamiczne tworzenie atrybutów za pomocą aplikacji refleksji java?

Pytam o to, ponieważ interesuje mnie trochę nauka języka Java i to, co można zrobić z JVM.

Dzięki.

Odpowiedz

4

Nie bardzo rozumiem, czego chcesz, przepraszam.

Ale jeśli chcesz mieć pole obiektu, którego wartość została zapisana w bazie danych w postaci szeregowej w pojedynczej kolumnie, a nie odwzorowywane na odniesienie do wiersza w innej tabeli, to jest to standardowa część WZP . Po prostu definiujesz pole, a następnie nie adnotuj go adnotacją relacji. Wierzę, że typ pola musi być podtypem Serializable, chociaż (niestety). Na przykład:

@Entity 
public class Colleague { 
    @Id 
    private int id; 
    private HashMap<Date, String> diary; 
} 

To będzie mapować do tabeli jak poniżej:

create table Colleague (
    id integer primary key, 
    diary blob 
) 

Teraz wspomniano JSON. To nie będzie używać JSON; użyje standardowej serializacji Java. Nie sądzę, że jest jakiś konkretny rozsądny sposób, aby użyć zamiast tego JSON; najłatwiej byłoby prawdopodobnie owinąć obiekt do serializacji w opakowaniu JSONifying. Nie za ciężko, ale trochę dziwnie.

Mimo że nie jest to JSON, jest użyteczny w podobny sposób: dane trafiają do bazy danych, a następnie znikają.

Ponownie, nie mam pojęcia, czy naprawdę tego chcesz, przepraszam!

+0

dzięki, czego chciałem, to funkcja :-) Zrobiłeś to! – thiagofm

+0

Niestety 'java.util.Map' nie rozszerza' java.io.Serializable', ale jego popularne implementacje robią! –

0

myślę, że można użyć Gson bibliotekę do tego. Umożliwia serializację i deserializację obiektów json lub obiektów java.

Dla plików XML można użyć biblioteki XStream.

0

Nie sądzę, że Hibernate ma takie narzędzie. Ale widzę 2 sposoby naśladować takie zachowanie

  1. Metodę JPA @PrePersit w swojej jednostce i korzystać z biblioteki json ponowne renderowanie wartości
  2. korzystać z niektórych AOP na metodach jednostki i ponownie render na w ten sam sposób,
Powiązane problemy