2011-04-14 78 views
1

我是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.hbm2ddl.auto來創建drop?(如果hibernate應該在運行測試時創建該數據庫)?

+0

是的,hibernate.hbm2ddl.auto被設置爲創建。我使用spring來映射實體類。這是我做的。 'AnnotationSessionFactoryBean annotationSessionFactoryBean = new AnnotationSessionFactoryBean(); \t \t annotationSessionFactoryBean.setDataSource(basicDataSource()); annotationSessionFactoryBean.setAnnotatedClasses(新類[] { domainObj.user.UserImp.class, \t \t \t \t \t \t \t \t //domainObj.user.staff.StaffImp.class /*如果我取消註釋上述行,我得到另一個錯誤:12:27:25,168錯誤JDBCExceptionReporter:234 - '訂單子句'中的未知列'children15_.CRM_User.Id'*/ });' – Charles 2011-04-17 02:29:07

+0

Is你有沒有理由不使用spring來管理你的bean創建? http://onjava.com/pub/a/onjava/2007/02/08/an-introduction-to-hibernate-3-annotations.html – 2011-04-17 10:30:42