2010-04-19 65 views
15

我尝试使用Hibernate持久化类,看起来像这样:休眠无法创建默认的tuplizer - 找不到吸气

public class Item implements Serializable, Comparable<Item> { 

// Item id 
private Integer id; 

// Description of item in inventory 
private String description; 

// Number of items described by this inventory item 
private int count; 

//Category item belongs to 
private String category; 

// Date item was purchased 
private GregorianCalendar purchaseDate; 

    public Item() { 
} 

    public Integer getId() { 
    return id; 
} 

public void setId(Integer id) { 
    this.id = id; 
} 

    public String getDescription() { 
    return description; 
} 

public void setDescription(String description) { 
    this.description = description; 
} 

public int getCount() { 
    return count; 
} 

public void setCount(int count) { 
    this.count = count; 
} 

public String getCategory() { 
    return category; 
} 

public void setCategory(String category) { 
    this.category = category; 
} 

public GregorianCalendar getPurchaseDate() { 
    return purchaseDate; 
} 

public void setPurchasedate(GregorianCalendar purchaseDate) { 
    this.purchaseDate = purchaseDate; 
} 

我的Hibernate映射文件包含以下内容:

<property name="puchaseDate" type="java.util.GregorianCalendar"> 
    <column name="purchase_date"></column> 
</property> 

当我尝试运行时,收到错误消息,指出purchaseDate属性没有getter函数:

577 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - Using Hibernate built-in connection pool (not for production use!) 
577 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - Hibernate connection pool size: 20 
577 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - autocommit mode: false 
592 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/home_inventory 
592 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - connection properties: {user=root, password=****} 
1078 [main] INFO org.hibernate.cfg.SettingsFactory - RDBMS: MySQL, version: 5.1.45 
1078 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-5.1.12 (Revision: ${bzr.revision-id}) 
1103 [main] INFO org.hibernate.dialect.Dialect - Using dialect: org.hibernate.dialect.MySQLDialect 
1107 [main] INFO org.hibernate.engine.jdbc.JdbcSupportLoader - Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4 
1109 [main] INFO org.hibernate.transaction.TransactionFactoryFactory - Using default transaction strategy (direct JDBC transactions) 
1110 [main] INFO org.hibernate.transaction.TransactionManagerLookupFactory - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended) 
1110 [main] INFO org.hibernate.cfg.SettingsFactory - Automatic flush during beforeCompletion(): disabled 
1110 [main] INFO org.hibernate.cfg.SettingsFactory - Automatic session close at end of transaction: disabled 
1110 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC batch size: 15 
1110 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC batch updates for versioned data: disabled 
1111 [main] INFO org.hibernate.cfg.SettingsFactory - Scrollable result sets: enabled 
1111 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC3 getGeneratedKeys(): enabled 
1111 [main] INFO org.hibernate.cfg.SettingsFactory - Connection release mode: auto 
1111 [main] INFO org.hibernate.cfg.SettingsFactory - Maximum outer join fetch depth: 2 
1111 [main] INFO org.hibernate.cfg.SettingsFactory - Default batch fetch size: 1 
1111 [main] INFO org.hibernate.cfg.SettingsFactory - Generate SQL with comments: disabled 
1111 [main] INFO org.hibernate.cfg.SettingsFactory - Order SQL updates by primary key: disabled 
1111 [main] INFO org.hibernate.cfg.SettingsFactory - Order SQL inserts for batching: disabled 
1112 [main] INFO org.hibernate.cfg.SettingsFactory - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory 
1113 [main] INFO org.hibernate.hql.ast.ASTQueryTranslatorFactory - Using ASTQueryTranslatorFactory 
1113 [main] INFO org.hibernate.cfg.SettingsFactory - Query language substitutions: {} 
1113 [main] INFO org.hibernate.cfg.SettingsFactory - JPA-QL strict compliance: disabled 
1113 [main] INFO org.hibernate.cfg.SettingsFactory - Second-level cache: enabled 
1113 [main] INFO org.hibernate.cfg.SettingsFactory - Query cache: disabled 
1113 [main] INFO org.hibernate.cfg.SettingsFactory - Cache region factory : org.hibernate.cache.impl.NoCachingRegionFactory 
1113 [main] INFO org.hibernate.cfg.SettingsFactory - Optimize cache for minimal puts: disabled 
1114 [main] INFO org.hibernate.cfg.SettingsFactory - Structured second-level cache entries: disabled 
1117 [main] INFO org.hibernate.cfg.SettingsFactory - Echoing all SQL to stdout 
1118 [main] INFO org.hibernate.cfg.SettingsFactory - Statistics: disabled 
1118 [main] INFO org.hibernate.cfg.SettingsFactory - Deleted entity synthetic identifier rollback: disabled 
1118 [main] INFO org.hibernate.cfg.SettingsFactory - Default entity-mode: pojo 
1118 [main] INFO org.hibernate.cfg.SettingsFactory - Named query checking : enabled 
1118 [main] INFO org.hibernate.cfg.SettingsFactory - Check Nullability in Core (should be disabled when Bean Validation is on): enabled 
1151 [main] INFO org.hibernate.impl.SessionFactoryImpl - building session factory 
org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer] 
    at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:110) 
    at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:135) 
    at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:80) 
    at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:323) 
    at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:475) 
    at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:133) 
    at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84) 
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:295) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385) 
    at service.HibernateSessionFactory.currentSession(HibernateSessionFactory.java:53) 
    at service.ItemSvcHibImpl.generateReport(ItemSvcHibImpl.java:78) 
    at service.test.ItemSvcTest.testGenerateReport(ItemSvcTest.java:226) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at junit.framework.TestCase.runTest(TestCase.java:164) 
    at junit.framework.TestCase.runBare(TestCase.java:130) 
    at junit.framework.TestResult$1.protect(TestResult.java:106) 
    at junit.framework.TestResult.runProtected(TestResult.java:124) 
    at junit.framework.TestResult.run(TestResult.java:109) 
    at junit.framework.TestCase.run(TestCase.java:120) 
    at junit.framework.TestSuite.runTest(TestSuite.java:230) 
    at junit.framework.TestSuite.run(TestSuite.java:225) 
    at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:107) 
    ... 29 more 
Caused by: org.hibernate.PropertyNotFoundException: Could not find a getter for puchaseDate in class domain.Item 
    at org.hibernate.property.BasicPropertyAccessor.createGetter(BasicPropertyAccessor.java:328) 
    at org.hibernate.property.BasicPropertyAccessor.getGetter(BasicPropertyAccessor.java:321) 
    at org.hibernate.mapping.Property.getGetter(Property.java:304) 
    at org.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertyGetter(PojoEntityTuplizer.java:299) 
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:158) 
    at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:77) 
    ... 34 more 

我是Hibernate的新手,所以我不知道所有的细节,但我确实拥有purchaseDate属性的getter和setter。我不知道我在这里错过了什么 - 是否有其他人?

回答

5

看起来问题可能在大写:setPurchasedate()应该是setPurchaseDate()(大写字母“D”)。

16

而且下来的堆栈跟踪,就这样说:

missing a getter for puchaseDate 

您可能要检查是否有错别字;)你错过了一个R和setPurchasedate应setPurchaseDate

+0

OK,我知道我失去了一些东西愚蠢的 - 我只是没想到它是愚蠢的。非常感谢! – ZeldaPinwheel 2010-04-19 18:18:07

+0

我在setter上使用camelCasing时遇到了同样的问题。修复了这个问题。 – 2012-03-23 10:41:21

+0

我有同样的问题 - 这个特殊的错误信息之前是*另一个*说我没有getter/setters设置正确... – rogerdpack 2013-05-10 16:38:17

35

它来找我一次没有任何错别字。我已将javassist.jar添加到类路径中,并解决了问题。

+1

这个错误发生在我与M2Eclipse Maven插件的Eclipse工作后,添加依赖于休眠3.6.4。这种依赖显然是不够的。我不得不另外添加依赖到javassist。谢谢你的提示,smentek。 – knb 2012-04-01 13:50:45

4

如果它可以帮助别人:

在我的情况有我的映射文件错误。类没有被完整的包名引用。我犯了这个错误,因为当我的bean类属于默认包(因此没有包名;例如:Order而不是com.mypackage.Order),然后我将我的bean类移动到包(在示例com.mypackage中)时,我生成了映射。不幸的是映射文件没有相应地改变新的包定义。

我的提示是重做Hibernate反向工程,并查看它产生的结果,并将它与您当前的映射文件进行比较。

+0

谢谢,这是为我做的,你刚刚救了我头痛。我已经有了javassist,并且所有其他解决方案在其getter/setters中都有错误,并且我无法弄清楚我的文件中存在哪些问题。我只是反向工程,以得到它应该是什么,并且做了诀窍。 :D – yuudachi 2011-10-04 23:20:05

+0

+1救了我的一天 – Jakob 2014-03-18 13:32:21

2

我经历了

Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer] 

,因为我对我以前映射一个POJO重命名字段时有donkeyness的瞬间流逝。

我用我可信的IDE重构热键更改了Java属性名称,不是也更改了setter方法名称的getter &。我改变了getter(因为它吸引了我的注意力,因为它的@Column注解我也需要解决,因为表列名称正在改变)。

然而,我忽视了改变二传手,那是错误的原因。

3

注意方法名称,是区分大小写

在我的情况下,它无法很好地识别getter;我的房产名称是uId,我用getUId名称作为获取者名称,当我将其更改为getuId问题解决!

+0

洙真实。 eclipse更容易生成getter和setter,而不是手动编写它们。 – Rahul 2015-05-01 18:18:12

2

我包括java的assit.jar和它的工作

<dependency> 
    <groupId>javassist</groupId> 
    <artifactId>javassist</artifactId> 
    <version>3.12.1.GA</version> 
</dependency>