Estoy desarrollando una aplicación donde todos los pojos están expuestos como interfaz, pero mapeamos la clase de implementación real. Estamos usando la anotación de primavera y JPA. Estoy a punto para probar la relación uno-a-uno y estoy teniendo un ligero problema con la interfaz.Hibernate Mapeo uno a uno con interfaz. Necesito consejo
causada por: org.springframework.beans.factory.BeanCreationException: Error al crear el frijol con el nombre 'sessionContainer' se define en la ruta de clase de recursos [META-INF/modelo-config.xml]:
No se puede resolver la referencia a bean 'sessionFactory' mientras configura el argumento constructor; excepción anidada es org.springframework.beans.factory.BeanCreationException: Error al crear bean con el nombre 'sessionFactory' definido en el recurso de vía de acceso de clase [META-INF/model-config.xml]:
Falló la invocación del método init; la excepción anidada es org.hibernate.AnnotationException:
@OneToOne o @ManyToOne en com.mycompany.project.subproject.model.UserAccountImpl.profile hace referencia a una entidad desconocida: com.mycompany.project.
así que antes de esta clase toda la otra clase asignada funcionan como se espera por lo que sólo a publicar parte del archivo applicationContext
que nombré model-config.xml
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
</props>
</property>
<property name="annotatedClasses">
<list>
...
<value>com.mycompany.project.subproject.model.UserProfileImpl</value>
<value>com.mycompany.project.subproject.model.UserAccountImpl</value>
...
</list>
</property>
aquí son los dos implicados clase UserProfileImpl.java
y UserAccountImpl.java
//UserAccountImpl Class
@Entity
@Table(name ="USER_ACCOUNT")
public class UserAccountImpl implements UserAccount {
@Id @GeneratedValue
@Column(name="USER_ACCOUNT_ID")
private Long ID;
...
@OneToOne
@JoinColumn(name="USER_PROFILE_ID")
private UserProfile profile;
...
}
//UserProfileImpl class
@Entity
@Table(name="USER_PROFILE")
public class UserProfileImpl implements UserProfile {
@Id @GeneratedValue
@Column(name="USER_PROFILE_ID")
private Long ID;
....
@OneToOne(mappedBy="profile")
private UserAccount userAccount;
....
}
todavía no estoy muy cómodo con la hibernación, así que me pregunto si debería cambiar la referencia UserProfile
en UserAccountImpl
a UserProfileImpl
. Entonces, nuevamente, puede ocurrir lo mismo en la referencia UserProfileImpl
para userAccount
, ya que es una navegación bidireccional. ¿Cuál es la mejor opción que no romperá la consistencia de la estructura? Gracias por leer este
Podría explicar por qué está utilizando las interfaces de POJOs? – dlinsin
Hibernate no puede saber qué clase necesita que implemente 'UserAccount', por lo tanto, debe usar' targetEntity' como @david, ya que Hibernate no puede inferir esto. –