2010-04-19 36 views
15

Tôi đang cố gắng sử dụng Hibernate để tồn tại một lớp trông như thế này:Hibernate không thể nhanh chóng tuplizer mặc định - không thể tìm thấy 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; 
} 

tập tin bản đồ Hibernate My chứa sau:

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

Khi tôi cố gắng chạy, tôi nhận được thông báo lỗi cho biết không có chức năng getter cho thuộc tính 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 

Tôi mới đến Hibernate, vì vậy tôi không biết tất cả các ins and outs, nhưng tôi có getter và setter cho thuộc tính purchaseDate. Tôi không biết những gì tôi đang thiếu ở đây - có ai khác không?

Trả lời

5

Có vẻ như vấn đề có thể ở dạng viết hoa: setPurchasedate() phải là setPurchaseDate() (với số vốn "D").

16

Tiếp tục trên xuống stack trace, nó nói này:

missing a getter for puchaseDate 

Bạn có thể muốn kiểm tra lỗi chính tả;) Bạn đang thiếu một R và setPurchasedate nên setPurchaseDate

+0

OK, tôi biết mình đã mất tích một cái gì đó ngu ngốc - Tôi chỉ không mong đợi nó sẽ RẰNG ngu ngốc. Cảm ơn rất nhiều! – ZeldaPinwheel

+0

Tôi đã gặp sự cố tương tự với camelCasing trên trình cài đặt. Đã khắc phục sự cố. –

+0

Tôi đã có cùng một vấn đề - thông báo lỗi cụ thể này được đặt trước bởi * một * nói rằng tôi không có thiết lập getter/setters ... – rogerdpack

35

Nó đến với tôi một lần mà không có bất kỳ lỗi chính tả nào. Tôi đã thêm javassist.jar vào classpath và nó giải quyết được vấn đề.

+1

Lỗi này xảy ra với tôi khi làm việc với Plugin M2Eclipse Maven cho Eclipse, sau khi thêm phụ thuộc vào ngủ đông 3.6.4. Sự phụ thuộc đó rõ ràng là không đủ. Tôi cũng phải thêm một phụ thuộc khác vào javassist. Cảm ơn gợi ý, smentek. – knb

4

Nếu nó có thể giúp ai đó:

Trong trường hợp của tôi có lỗi trong các tập tin bản đồ của tôi. Các lớp học không được tham chiếu bởi tên gói đầy đủ của chúng. Tôi đã làm sai lầm này vì tôi tạo ra ánh xạ khi lớp bean của tôi thuộc về gói mặc định (do đó không có tên gói, ví dụ: Order thay vì com.mypackage.Order) và sau đó tôi chuyển lớp bean của mình thành gói (trong ví dụ com.mypackage). Thật không may là các tệp ánh xạ không thay đổi theo định nghĩa gói mới.

Gợi ý của tôi là làm lại kỹ thuật đảo ngược Hibernate và xem nó tạo ra gì, so sánh nó với các tệp ánh xạ hiện tại của bạn.

+0

Cảm ơn, điều này đã làm cho tôi, bạn chỉ cần cứu tôi đau đầu. Tôi đã có javassist rồi, và tất cả các giải pháp khác có gì đó sai trong getters/setters của họ, và tôi không thể tìm ra nơi mà vấn đề là cho tôi trong các tập tin của tôi. Tôi chỉ đảo ngược thiết kế để có được những gì nó cần được, và đó đã làm các trick. : D – yuudachi

+0

+1 đã lưu ngày của tôi – Jakob

2

Tôi có kinh nghiệm

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

vì tôi đã có một sai sót nhất thời của donkeyness khi đổi tên một vùng trên POJO mà tôi đã ánh xạ trước đó.

Tôi đã thay đổi tên thuộc tính Java bằng phím nóng refactor IDE đáng tin cậy của mình, không cũng thay đổi tên phương thức setter &. Tôi đã thay đổi getter (vì nó thu hút sự chú ý của tôi với chú thích @Column của nó mà tôi cũng cần phải giải quyết vì tên cột của bảng đã thay đổi).

Tôi đã bỏ qua, tuy nhiên, để thay đổi setter, và đó là nguyên nhân của lỗi.

3

Chú ý đến tên phương thức, Đây là phân biệt chữ hoa chữ thường!

Trong trường hợp của tôi, nó không thể nhận ra getter rất tốt; tên thuộc tính của tôi là uId và tôi đã sử dụng tên getUId cho tên getter và khi tôi đổi tên thành getuId vấn đề được giải quyết!

+0

Soo true. Nó dễ dàng hơn nhiều để có eclipse tạo ra getters và setters thay vì viết bằng tay chúng. – Rahul

2

tôi bao gồm java assit.jar và nó làm việc

<dependency> 
    <groupId>javassist</groupId> 
    <artifactId>javassist</artifactId> 
    <version>3.12.1.GA</version> 
</dependency> 
Các vấn đề liên quan