Używam hibernacji i adnotacji dla ORM. Mam interfejsy dla wszystkich komponentów bean i używam targetEntity dla relacji: hibernate nie może wyprowadzić typu, ponieważ getter zwraca interfejs zamiast komponentu bean.Nadpisanie @ManyToOne targetEntity dla @Embedded z interfejsami
Otrzymuję wyjątek MappingException (nie można określić typu) dla zagnieżdżonych komponentów bean.
@Entity(name="FieldBean")
public class FieldBean implements Field {
...
}
@Embeddable
public class FacetBean implements Facet {
...
@ManyToOne(targetEntity = FieldBean.class)
@JoinColumn(name = "field_id")
public Field getField() {
return field;
}
}
@Entity(name = "Chart")
public class ChartBean implements Chart {
@Embedded
@AssociationOverride(
name = "field",
joinColumns = @JoinColumn(name = "category_facet_field_id")
)
public Facet getCategoryFacet() {
return categoryFacet;
}
}
uzyskać MappingException: nie można określić typ dla: Pole, w tabeli: wykres, na kolumnach: [org.hibernate.mapping.Column (pole)]
Korzystanie fasola zamiast interfejsy dla deklaracje właściwości i getter/setter rozwiązują problem, ale chciałbym trzymać się za pomocą interfejsów. Używanie komponentów bean do samych deklaracji właściwości nie rozwiązuje problemu.
Czy ktoś może wskazać mi właściwy kierunek?
Używam interfejsy i dziedziczenie. Przyznano, że wprowadziło to pewną złożoność na poziomie ORM. Z drugiej strony zapewnia mi poziom abstrakcji, którego szukam. – user1966634
** Interfejsy ** są używane w celu zapewnienia abstrakcji technologii ORM. Za pomocą podejścia MDA generuję kod warstwy trwałości z modelu obiektowego, w tym interfejsy, komponenty bean i klasy usług. Alternatywną technologię ORM można stosować w sposób przejrzysty, utrzymując stabilność interfejsów, ale generując alternatywne ziarna i klasy usług. – user1966634
** Dziedziczenie ** jest potrzebne z perspektywy modelowania danych do obsługi zarówno ogólnych, jak i szczegółowych widoków danych, w szczególności, ale nie wyłącznie, na relacyjnym poziomie bazy danych. Pomimo niektórych wad funkcja ta jest użyteczna i upraszcza kod na wyższych poziomach w stosie aplikacji. – user1966634