Mam migrować niektóre klasy w pliku hbm.xml Hibernate do adnotacji JPA.Wykluczanie pól z @Embedded properties dla każdego przypadku z Hibernate/JPA
Mamy wbudowaną klasę Address
używaną w kilku miejscach. Każde miejsce używa innego podzbioru właściwości w adresie.
(pobierające/ustawiające pominięte dla zwięzłości)
@Embeddable
public class Address {
String email;
String address;
String city;
String state;
String zip;
String country;
}
@Entity
@Table(name="customer")
public class Customer {
@Embedded
@AttributeOverrides({
@AttributeOverride(name="address", [email protected](name="ship_addr"),
@AttributeOverride(name="city", [email protected](name="ship_city"),
@AttributeOverride(name="state", [email protected](name="ship_state"),
@AttributeOverride(name="zip", [email protected](name="ship_zip"),
@AttributeOverride(name="country", [email protected](name="ship_country")
})
Address shippingAddress;
@Embedded
@AttributeOverrides({
@AttributeOverride(name="address", [email protected](name="bill_addr"),
@AttributeOverride(name="city", [email protected](name="bill_city"),
@AttributeOverride(name="state", [email protected](name="bill_state"),
@AttributeOverride(name="zip", [email protected](name="bill_zip")
})
Address billingAddress;
}
Należy zauważyć, że w tym contrived przykład shippingAddress wykorzystuje Address.country, ale billingAddress nie; i żadne z nich nie używa adresu.email.
Problem polega na tym, że stan hibernacji oznacza tagi @Column
dla każdej kolumny, w której jej nie podano.
Próbowałem dodanie @Transient
wszystkich dziedzinach Address
, ale wydaje się, że nie robi @AttributeOverride
atutem @Transient
.
Czy istnieje sposób obejścia tego problemu?
Problem polega na tym, że jest to typowa klasa stosowana w całej naszej organizacji. Szukam sposobu na przeniesienie tej klasy do JPA bez zmiany zachowania lub zmuszenie 30 różnych zespołów do dostosowania swojego kodu. – qualidafial
Należy również zauważyć, że jest to problem związany z przełączeniem JPA na opcję rezygnacji przy użyciu parametru Transient zamiast &at;, a nie z opcjonalnym użyciem kolumny &at;. Pomysł polegał na tym, aby uchwała JPA była mniej inwazyjna, ponieważ nie wymagała ona adnotacji z kolumny wszędzie - jest to tylko efekt uboczny, który nas ugryzł i uniemożliwił przeniesienie tej jednej klasy ze starszej konfiguracji XML do adnotacji JPA. – qualidafial
Jeśli nie możesz zmienić modelu, to nie widzę rozwiązania. Musisz po prostu zignorować właściwości adresu, które nie są używane, a tym samym zostawić je puste w DB. Brudne rozwiązanie, ale najmniej inwazyjne. –