2016-09-27 48 views
1

我正在研究Spring + Spring Data JPA示例。在这个例子中我跑我的测试情况下得到Actor by FirstName and LastName,但是当我运行测试时,我看到了以下错误:原因:org.hibernate.MappingException:属性映射的列数错误:com.sakila.entity.Film.specialFeatures类型:对象

java.lang.IllegalStateException: Failed to load ApplicationContext 
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) 
    at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83) 
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117) 
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83) 
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [spring/database-context.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: jpa-mysql-db] Unable to build Hibernate SessionFactory 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1582) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1054) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:829) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128) 
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60) 
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108) 
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:251) 
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) 
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) 
    ... 25 more 
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: jpa-mysql-db] Unable to build Hibernate SessionFactory 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:951) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:881) 
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) 
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:340) 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:319) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1641) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) 
    ... 40 more 
Caused by: org.hibernate.MappingException: property mapping has wrong number of columns: com.sakila.entity.Film.specialFeatures type: object 
    at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:600) 
    at org.hibernate.mapping.RootClass.validate(RootClass.java:265) 
    at org.hibernate.boot.internal.MetadataImpl.validate(MetadataImpl.java:329) 
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:489) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:878) 
    ... 45 more 

我使用的sakila数据库从链接:https://dev.mysql.com/doc/index-other.html

mysql> desc film; 
+----------------------+---------------------------------------------------------------------+------+-----+-------------------+-----------------------------+ 
| Field    | Type                | Null | Key | Default   | Extra      | 
+----------------------+---------------------------------------------------------------------+------+-----+-------------------+-----------------------------+ 
| film_id    | smallint(5) unsigned            | NO | PRI | NULL    | auto_increment    | 
| title    | varchar(255)              | NO | MUL | NULL    |        | 
| description   | text                | YES |  | NULL    |        | 
| release_year   | year(4)                | YES |  | NULL    |        | 
| language_id   | tinyint(3) unsigned             | NO | MUL | NULL    |        | 
| original_language_id | tinyint(3) unsigned             | YES | MUL | NULL    |        | 
| rental_duration  | tinyint(3) unsigned             | NO |  | 3     |        | 
| rental_rate   | decimal(4,2)              | NO |  | 4.99    |        | 
| length    | smallint(5) unsigned            | YES |  | NULL    |        | 
| replacement_cost  | decimal(5,2)              | NO |  | 19.99    |        | 
| rating    | enum('G','PG','PG-13','R','NC-17')         | YES |  | G     |        | 
| special_features  | set('Trailers','Commentaries','Deleted Scenes','Behind the Scenes') | YES |  | NULL    |        | 
| last_update   | timestamp               | NO |  | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | 
+----------------------+---------------------------------------------------------------------+------+-----+-------------------+-----------------------------+ 
13 rows in set (0.00 sec) 

Film.java

@Entity 
@NamedQuery(name="Film.findAll", query="SELECT f FROM Film f") 
public class Film implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="film_id") 
    private int filmId; 

    @Lob 
    private String description; 

    @Column(name="last_update") 
    private Timestamp lastUpdate; 

    private int length; 

    private String rating; 

    @Temporal(TemporalType.DATE) 
    @Column(name="release_year") 
    private Date releaseYear; 

    @Column(name="rental_duration") 
    private byte rentalDuration; 

    @Column(name="rental_rate") 
    private BigDecimal rentalRate; 

    @Column(name="replacement_cost") 
    private BigDecimal replacementCost; 

    @Column(name="special_features") 
    private Object specialFeatures; 

    private String title; 

    //bi-directional many-to-one association to Language 
    @ManyToOne 
    @JoinColumn(name="language_id") 
    private Language language1; 

    //bi-directional many-to-one association to Language 
    @ManyToOne 
    @JoinColumn(name="original_language_id") 
    private Language language2; 

    //bi-directional many-to-one association to FilmActor 
    @OneToMany(mappedBy="film") 
    private List<FilmActor> filmActors; 

    //bi-directional many-to-one association to FilmCategory 
    @OneToMany(mappedBy="film") 
    private List<FilmCategory> filmCategories; 

    //bi-directional many-to-one association to Inventory 
    @OneToMany(mappedBy="film") 
    private List<Inventory> inventories; 

    // Assume respective setters and getters are present 
} 

请让我知道是否需要任何其他信息。

回答

0
  • 如果使用maven,请将xml文件放在资源文件夹中。
  • 否则,将包含xml文件的文件夹添加到源文件夹。

好运

+0

我使用Maven和XML文件中的src/main /资源,还是问题已经怨恨 –

相关问题