Я занимаюсь разработкой приложения, в котором все pojos представлены в виде интерфейса, но мы отображаем реальный класс реализации. Мы используем Spring и JPA annotation. Я собираюсь протестировать отношения один-к-одному, и я возникли проблемы с интерфейсом.
Причина: org.springframework.beans.factory.BeanCreationException: Ошибка создания компонента с именем 'sessionContainer', определенным в ресурсе пути к классу [META-INF / model-config.xml]:
Не удается разрешить ссылку на bean-компонент sessionFactory при установке аргумента конструктора; вложенным исключением является org.springframework.beans.factory.BeanCreationException:
Ошибка создания компонента с именем 'sessionFactory', определенным в ресурсе пути к классу [META-INF / model-config.xml]:
Ошибка вызова метода init; вложенным исключением является org.hibernate.AnnotationException:
@OneToOne или @ManyToOne на com.mycompany.project.subproject.model.UserAccountImpl.profile ссылается на неизвестную сущность: com.mycompany.project.
так что перед этим классом все остальные сопоставленные классы работают должным образом, поэтому я опубликую только часть файла applicationContext
, который я назвал 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>
вот два участвующих класса UserProfileImpl.java
и 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;
....
}
Мне все еще не очень комфортно с Hibernate, поэтому мне интересно, стоит ли мне изменить ссылку UserProfile
в UserAccountImpl
на UserProfileImpl
. Затем снова то же самое может произойти в UserProfileImpl
для userAccount
ссылка, так как это двунаправленная навигация.
Какой самый лучший вариант, который не нарушит согласованность структуры?
Спасибо за чтение этого