Mamy zestaw interfejsów, używany jako interfejs API i do którego można się odwoływać z innych modułów. Zestaw konkretnych implementacji tych interfejsów, prywatny do "głównego" modułu aplikacji. Te klasy zawierają wiele adnotacji (JPA oraz serializacja XStream dla XML).Hibernate i JPA - mapowanie błędów Klasa osadzona udostępniona przez interfejs
Wystąpił problem. Mamy klasę użytkownika, która zawiera wiele pól związanych z lokalizacją. Chcielibyśmy zamienić je w klasę adresu. Chcemy, aby dane (na razie) pozostały w tej samej tabeli. Podejście to klasa osadzona.
Problem polega na tym, że sygnatury typów muszą odnosić się tylko do innych interfejsów w celu spełnienia implementowanych przez nie interfejsów.
Kiedy próbuję utrzymują się UserImpl, otrzymuję wyjątek:
org.hibernate.MappingException: Nie można określić typ dla : com.example.Address, w tabeli: dla użytkownika, kolumny: [org.hibernate.mapping.Column (adresu)]
Przykład Kod:
interface User {
int getId();
String getName();
Address getAddress();
}
@Entity
class UserImpl implements User {
int id;
String name;
Address address;
int getId() {
return id;
}
void setId(int id) {
this.id = id;
}
String getName() {
return name;
}
String setName(String name) {
this.name = name;
}
@Embedded
Address getAddress() {
return address;
}
void setAddress(Address address) {
this.address = address;
}
}
interface Address {
String getStreet();
String getCity();
String getState();
String getZip();
String getCountry();
}
@Embeddable
class AddressImpl implements Address {
String street;
String city;
String state;
String zip;
String country;
public String getStreet() {
return street;
}
public String getCity() {
return city;
}
public String getState() {
return state;
}
//... etc
}
Dzięki, że to rzeczywiście rozwiązanie chociaż ja ufałem to może być wykonane przy użyciu tylko JPA. Może pomóc dowiedzieć się, czy jest to możliwe w przypadku innych implementacji JPA. –
Na podstawie wspomnianego wyjątku założyłem, że korzystasz z Hibernacji. Szanse są, jeśli jest częścią Hibernate Adnotations, nie została jeszcze dodana do specyfikacji JPA. – mtpettyp
Jesteśmy, ale byłoby miło być neutralnym dla sprzedawcy, jeśli to możliwe. –