Tenemos un conjunto de interfaces, se utiliza como una API y se hace referencia a partir de otros módulos. Un conjunto de implementaciones concretas de esas interfaces, privadas para el módulo de aplicación "principal". Estas clases llevan una cantidad de anotaciones (JPA y XStream para la serialización de XML).Hibernate y JPA - Asignación de errores Clase incrustada expuesta a través de una interfaz
Me he encontrado con un problema. Tenemos una clase de usuario que tiene una cantidad de campos dentro de ella relacionados con la ubicación. Nos gustaría incluirlos en una clase de Dirección. Queremos que los datos (por ahora) permanezcan en la misma tabla. El enfoque es una clase incrustada.
El problema es que las firmas de tipos solo deben referirse a otras interfaces para satisfacer las interfaces que implementan.
Cuando intento para conservar un UserImpl, tengo la excepción:
org.hibernate.MappingException: se pudo determinar el tipo de no para: com.example.Address, en la mesa: el usuario, para columnas: [org.hibernate.mapping.Column (dirección)] código de
Ejemplo:
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
}
Gracias, eso es de hecho una solución pesar de que estaba esperando que esto se podría hacer utilizando sólo APP. Podría ayudar a saber si esto es posible con otras implementaciones de JPA. –
Según la excepción que mencionaste, asumí que estaba usando Hibernate. Lo más probable es que si es parte de Hibernate Annotations, aún no se haya agregado a la especificación JPA. – mtpettyp
Lo somos, pero sería bueno ser neutral con los proveedores cuando sea posible. –