2010-04-19 1 views
15

J'essaie d'utiliser Hibernate persister une classe qui ressemble à ceci:Mise en veille prolongée incapable de instancier par défaut tuplizer - ne peut pas trouver getter

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; 
} 

Mon fichier de mappage Hibernate contient les éléments suivants:

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

Lorsque j'essaie de courir, je reçois des messages d'erreur indiquant qu'il n'y a pas de fonction getter pour l'attribut purchaseDate:

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 

Je suis nouveau sur Hibernate, donc je ne connais pas tous les tenants et les aboutissants, mais j'ai le getter et le setter pour l'attribut purchaseDate. Je ne sais pas ce qui me manque ici - quelqu'un d'autre?

Répondre

5

On dirait que le problème est probablement dans la casse: setPurchasedate() devrait être setPurchaseDate() (avec un "D" majuscule).

16

Plus loin en bas de la trace de la pile, il est dit ceci:

missing a getter for puchaseDate 

Vous pouvez vérifier les fautes de frappe;) Vous êtes absent un R et setPurchasedate doit être setPurchaseDate

+0

OK, je savais que je manque quelque chose de stupide - je ne me attendais pas qu'il soit stupide. Merci beaucoup! – ZeldaPinwheel

+0

J'ai eu les mêmes problèmes avec le camelCasing sur un setter. Correction du problème –

+0

J'ai eu le même problème - ce message d'erreur particulier a été précédé par * un autre * disant que je n'avais pas la configuration getter/setters correcte ... – rogerdpack

35

Il est venu me une fois sans fautes de frappe. J'ai ajouté javassist.jar à classpath et il a résolu le problème.

+1

Cette erreur est survenue en travaillant avec le plugin M2Eclipse Maven pour Eclipse, après avoir ajouté un dépendance à hiberner 3.6.4. Cette dépendance n'était évidemment pas suffisante. J'ai dû ajouter une autre dépendance au javassiste, aussi. Merci pour l'indice, Smentek. – knb

4

Si cela peut aider quelqu'un:

Dans mon cas, il y avait erreurs dans mes fichiers de mappage. Les classes n'étaient pas référencées par leur nom de paquet complet. J'ai fait cette erreur parce que j'ai généré les mappages quand mes classes de bean appartenaient au paquet par défaut (donc pas de nom de paquet, par exemple: Order au lieu de com.mypackage.Order) puis j'ai déplacé mes classes de bean au paquet (dans l'exemple com.mypackage). Malheureusement, les fichiers de mappage n'ont pas été modifiés en conséquence avec la nouvelle définition de package. Mon conseil est de refaire le reverse engineering d'Hibernate et de voir ce qu'il produit, en le comparant avec vos fichiers de mapping actuels.

+0

Merci, ça l'a fait pour moi, vous venez de me sauver un mal de tête. J'avais déja du javassist, et toutes les autres solutions avaient quelque chose de mal chez leurs getters/setters, et je n'arrivais pas à comprendre où était ce problème pour moi dans mes fichiers. Je viens d'inverser l'ingénierie pour obtenir ce qu'il devrait être, et cela a fait l'affaire. : D – yuudachi

+0

+1 enregistré ma journée – Jakob

2

je connu le

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

parce que j'avais une défaillance momentanée de donkeyness lors du renommage d'un champ sur un POJO que j'avais déjà cartographié.

J'ai changé le nom d'attribut Java avec mon raccourci clavier IDE fidèle refactoring, qui ne pas changer aussi les noms de méthode setter getter &. J'ai changé le getter (parce qu'il a attiré mon attention avec son annotation @Column que j'avais aussi besoin d'adresser parce que le nom de la colonne du tableau changeait).

J'ai cependant négligé de modifier le setter, ce qui était la cause de l'erreur.

3

Faites attention au nom de la méthode, Il est sensible à la casse!

Dans mon cas, il ne pouvait pas très bien reconnaître le getter; mon nom de propriété était uId et j'ai utilisé le nom getUId pour le nom getter et quand je l'ai changé pour getuId problème résolu!

+0

Soo true. Il est beaucoup plus facile d'avoir eclipse générer des getters et des setters au lieu de les écrire manuellement. – Rahul

2

I inclus assit.jar java et cela a fonctionné

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