Hibernate & Jackson - automatyzacja, a klasa na widoku

0

Witam,
mam tabelę i dedykowaną dla niej klasę klasaTab @Entity, mam też widok dla tej tabeli i klasę klasaView rozszerzającą klasę dla tabeli
[code]
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
[/code]

chciałem sobie oszczędzić pracy przeciążając klasę, jednak hibernate protestuje
[code]
org.hibernate.WrongClassException: Object with id: 1200 was not of the specified subclass: pl.test.entity.klasaView (loaded object was of wrong class class pl.test.entity.klasaTab)
[/code]

możliwe, że problem wynika z mojej niewiedzy tzn. request wygląda tak (json w requescie to same identyfikatory)
[code]
@PUT
@Path("/list")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public klasaView addUser(klasaTab t) throws Exception
[/code]

co mogę z tym zrobić?

// edit
inaczej, bo nie wiem czy namieszałem - potrzebne chyba jest coś z @Inheritance(strategy=InheritanceType.SINGLE_TABLE), a w klasach podrzędnych dodanie JOINa....tylko co wtedy z Jacksonem?

0

yPrzyznam, że nie do końca rozumiem problem. Co ma do tego Jackson? Serializować możesz dowolne obiekty, deserializować z tego co rozumiem chcesz i tak tylko jeden typ. Jeżeli chcesz mieć jedną tabelę w bazie i kolumnę z dyskryminatorem określającym typ możesz zastosować coś takiego:

@Entity
@Table(name = "Sup")
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
    @Type(value = SubClass1.class),
    @Type(value = SubClass2.class)})
public class SupClass {}

@Entity
@DiscriminatorValue("SubClass1")
@JsonTypeName("SubClass1")
public class SubClass1 {}

@Entity
@DiscriminatorValue("SubClass2")
@JsonTypeName("SubClass2")
public class SubClass2 {}

W ten sposób w bazie danych powstanie dodatkowa kolumna 'type' przechowująca wartość z adnotacji @DiscriminatorValue opisywanej klasy, a w jsonie powstanie dodatkowe pole 'type' które pozwoli deserializować i serializować tak powstałe typy.

0

musiałem zrezygnować z dyskryminatorów :/ konieczne były JOINy i w związku z nimi problem mam nadal tzn
Jeśli mam moją Entity i do niej One-to-One EntityDetails to powstaje mi właściwość-klasa (a nie typ pierwotny) w mojej Entity
jak to zostanie zserializowane?
czy jest szansa na uzyskanie czegoś takiego?
[code]
// klasa user left join adres (1-1) - properties klasy "adres" w JSONie są properties klasy "user"
{name:"xxx", surname"yyyy", street:"zzz"}
[/code]

0

nie chodzi ci o @JsonUnwrapped

1 użytkowników online, w tym zalogowanych: 0, gości: 1