2010-04-19 3 views
15

Я пытаюсь использовать Hibernate упорствовать класс, который выглядит следующим образом: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> 

Когда я пытаюсь запустить, я получаю сообщения об ошибках, указывающие на отсутствие функции getter для атрибута 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 

Я новичок в Hibernate, поэтому я не знаю всех входов и выходов, но у меня есть getter и setter для атрибута purchaseDate. Я не знаю, чего мне здесь не хватает - кто-нибудь еще?

ответ

5

Похоже, проблема заключается, вероятно, в капитализации: setPurchasedate() должно быть setPurchaseDate() (с капиталом «D»).

16

Далее вниз трассировки стека, он говорит, что это:

missing a getter for puchaseDate 

Вы можете проверить наличие опечаток;) Вы упускаете в R и setPurchasedate должны быть setPurchaseDate

+0

Хорошо, я знал, что я что-то отсутствует глупо - я просто не ожидал, что это будет настолько глуп. Огромное спасибо! – ZeldaPinwheel

+0

У меня были те же проблемы с camelCasing на сеттере. Исправлена ​​проблема. –

+0

У меня была та же проблема - этому конкретному сообщению об ошибке предшествовало * другое *, сказав, что у меня не было настройки getter/seters правильно ... – rogerdpack

35

Он пришел ко мне один раз без опечаток. Я добавил javassist.jar в classpath, и он решил проблему.

+1

Эта ошибка возникла у меня, работая с M2Eclipse Maven Plugin для Eclipse, после добавления зависимость от спящего режима 3.6.4. Эта зависимость явно недостаточна. Мне пришлось добавить еще одну зависимость к javassist. Спасибо за намек, сентек. – knb

4

Если это может помочь кому-то:

В моем случае были ошибки в моих отображения файлов. На классы не ссылались их полные имена пакетов. Я сделал эту ошибку, потому что я создал сопоставления, когда мои классы боба принадлежали к пакету по умолчанию (отсюда нет имени пакета, например: Order вместо com.mypackage.Order), а затем я переместил классы бобов в пакет (в примере com.mypackage). К сожалению, файлы сопоставления не изменились соответственно с новым определением пакета.

Мой намек на повторное проектирование Hibernate и посмотреть, что он производит, сравнивая его с текущими файлами сопоставления.

+0

Спасибо, это сделало это для меня, вы просто спасли мне головную боль. У меня уже был javassist, и все другие решения что-то не так в их getters/seters, и я не мог понять, где эта проблема была для меня в моих файлах. Я просто переделал дизайн, чтобы понять, что должно быть, и это сделало трюк. : D – yuudachi

+0

+1 сохранен мой день – Jakob

2

я испытал

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

, потому что у меня был мгновенный промежуток donkeyness при переименовании поля на POJO, что я ранее отображенным.

Я изменил Java имени атрибута с моим испытанным IDE Refactor горячих клавиш, который делает не также изменить геттер & имена методов сеттер. Я изменил getter (потому что это привлекло мое внимание с помощью аннотации @Column, которые мне также нужно было решать, потому что имя столбца таблицы менялось).

Я пренебрег, однако, изменить сеттер, и это стало причиной ошибки.

3

Обратите внимание на метод имени, это с учетом регистра!

В моем случае он не мог распознать геттер очень хорошо; мое имя собственности было uId, и я использовал getUId имя для имени геттера, и когда я сменил его на getuId проблема решена!

+0

Soo true. Его намного легче заставить eclipse генерировать геттеры и сеттеры вместо того, чтобы вручную их записывать. – Rahul

2

Я включил Java assit.jar и он работал

<dependency> 
    <groupId>javassist</groupId> 
    <artifactId>javassist</artifactId> 
    <version>3.12.1.GA</version> 
</dependency> 
Смежные вопросы