Hibernate не удается создать объединенную таблицу подкласса при использовании аннотации

#java #database #hibernate #annotations #joined-subclass

#java #База данных #hibernate #аннотации #объединенный подкласс

Вопрос:

Я новичок в Hibernate и не могу создать объединенную таблицу подкласса при использовании аннотации Hibernate.

Вот мой код.

Это основной класс.

 @Entity
@Table(name="CRM_User")
@Inheritance(strategy=InheritanceType.JOINED)
public class UserImp extends BaseModel implements IUser, Serializable
{
  ... ...
  

И класс Staff расширяет класс User.

 @Entity
@Table(name="CRM_Staff") 
@PrimaryKeyJoinColumn(name="Id")
public class StaffImp extends UserImp implements IStaff, Serializable
{
  ... ...   
  

И когда я запускаю модульный тест, я получаю ошибку.

 /* Test get all User */
@Test
public void testGetAllUser()
{
    List<IUser> users = (List<IUser>) this.userDAO.getAll("UserImp");
    assertEquals(2, users.size());
}
  

Это ошибка.

 ......
19:31:04,880  INFO SchemaExport:281 - schema export complete
19:31:04,918  INFO DefaultTraversableResolver:81 - Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
19:31:05,158  WARN JDBCExceptionReporter:233 - SQL Error: 1146, SQLState: 42S02
19:31:05,158 ERROR JDBCExceptionReporter:234 - Table 'test.crm_staff' doesn't exist  
... ...
  

Большое спасибо!

Ответ №1:

Ваши аннотации кажутся правильными итак: существует ли таблица ‘crm_staff’? Вы создали базу данных с этой таблицей или (если hibernate должен создать это при запуске теста) вы установили hibernate.hbm2ddl.auto для create-drop?

Комментарии:

1. Да, для hibernate.hbm2ddl.auto установлено значение create. И я использую spring для сопоставления класса сущности. Вот что я сделал. AnnotationSessionFactoryBean annotationSessionFactoryBean = new AnnotationSessionFactoryBean(); annotationSessionFactoryBean.setDataSource(basicDataSource()); annotationSessionFactoryBean.setAnnotatedClasses(new Class[]{ domainObj.user.UserImp.class, //domainObj.user.staff.StaffImp.class /* If I uncomment the above line, I get another error: 12:27:25,168 ERROR JDBCExceptionReporter:234 - Unknown column 'children15_.CRM_User.Id' in 'order clause' */ });

2. Есть ли какая-либо причина, по которой вы не используете spring для управления созданием вашего компонента? onjava.com/pub/a/onjava/2007/02/08 /…