2015-03-06 3 views
2

Я пытаюсь изучить Hibernate, и я следую этому руководству: http://www.visualcplusdotnet.com/javaopensource/javahibernateswingdesktopapp5.html за исключением того, что я использую свою собственную базу данных примеров. Я обратной инженерии в POJO, для моей contact таблицы, которая выглядит следующим образом:org.hibernate.PropertyNotFoundException: Не удалось найти getter для id в классе model.Contact

enter image description here

и Netbeans автоматически сгенерированный файл .java, который выглядел следующим образом (Contact.java):

package model; 
// Generated Mar 6, 2015 12:04:10 AM by Hibernate Tools 4.3.1 



/** 
* Contact generated by hbm2java 
*/ 
public class Contact implements java.io.Serializable { 


    private Integer id; 
    private String firstname; 
    private String lastname; 
    private String email; 
    private String phone; 
    private boolean active; 

    public Contact() { 
    } 


    public Contact(String firstname, String lastname, boolean active) { 
     this.firstname = firstname; 
     this.lastname = lastname; 
     this.active = active; 
    } 
    public Contact(String firstname, String lastname, String email, String phone, boolean active) { 
     this.firstname = firstname; 
     this.lastname = lastname; 
     this.email = email; 
     this.phone = phone; 
     this.active = active; 
    } 

    public Integer getId() { 
     return this.id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 
    public String getFirstname() { 
     return this.firstname; 
    } 

    public void setFirstname(String firstname) { 
     this.firstname = firstname; 
    } 
    public String getLastname() { 
     return this.lastname; 
    } 

    public void setLastname(String lastname) { 
     this.lastname = lastname; 
    } 
    public String getEmail() { 
     return this.email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 
    public String getPhone() { 
     return this.phone; 
    } 

    public void setPhone(String phone) { 
     this.phone = phone; 
    } 
    public boolean isActive() { 
     return this.active; 
    } 

    public void setActive(boolean active) { 
     this.active = active; 
    } 




} 

и XML-файл, который выглядит следующим образом (Contact.hbm.xml)

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
<!-- Generated Mar 6, 2015 12:04:12 AM by Hibernate Tools 4.3.1 --> 
<hibernate-mapping> 
    <class name="model.Contact" table="contact" catalog="crmtool" optimistic-lock="version"> 
     <id name="id" type="java.lang.Integer"> 
      <column name="id" /> 
      <generator class="identity" /> 
     </id> 
     <property name="firstname" type="string"> 
      <column name="firstname" length="100" not-null="true" /> 
     </property> 
     <property name="lastname" type="string"> 
      <column name="lastname" length="100" not-null="true" /> 
     </property> 
     <property name="email" type="string"> 
      <column name="email" length="100" /> 
     </property> 
     <property name="phone" type="string"> 
      <column name="phone" length="10" /> 
     </property> 
     <property name="active" type="boolean"> 
      <column name="active" not-null="true" /> 
     </property> 
    </class> 
</hibernate-mapping> 

После чистой и строить, когда я бегу этот запрос HQL:

from Contact 

Я получаю эту ошибку:

org.hibernate.PropertyNotFoundException: Could not find a getter for id in class model.Contact 
at org.hibernate.property.BasicPropertyAccessor.createGetter(BasicPropertyAccessor.java:310) 
at org.hibernate.property.BasicPropertyAccessor.getGetter(BasicPropertyAccessor.java:304) 
at org.hibernate.tuple.PropertyFactory.getGetter(PropertyFactory.java:497) 
at org.hibernate.tuple.PropertyFactory.buildIdentifierAttribute(PropertyFactory.java:87) 
at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:163) 
at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:520) 
at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:148) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:408) 
at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:163) 
at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:135) 
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:400) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1857) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1928) 

после прочтения ответов на эти вопросы:

я понял, что ответ должен быть что-то не так с тем, как id в настоящее время капитализированы в поглотителе, поэтому я попытался:

public Integer getid() { 
    return this.id; 
} 

public int getId() { 
    return this.id; 
} 

public int getid() { 
    return this.id; 
} 

Все виды вещей, но до сих пор ничего не работает.

Кто-нибудь знает, почему я получаю эту ошибку?

+0

Ваша конфигурация выглядит правильно. Можете сделать простой тест, просто переименуйте свой id-атрибут, чтобы сказать contactId и создать геттеры и сеттеры, соответствующим образом измените Contact.hbm.xml и посмотрите, не жалуется ли hibernate на невозможность использования метода getter для нового атрибута. Получив это чувство, есть проблема очистки проекта. – jitsonfire

+0

@jitsonfire, это, действительно, решило проблему. У меня всегда была практика присвоения автоматически сгенерированного первичного ключа для каждой таблицы как «id». Я думаю, что практика закончилась ... – ryvantage

+0

Если вы оставите свой комментарий в качестве ответа, я соглашусь с ним. – ryvantage

ответ

2

Здесь находится: Ваша конфигурация выглядит правильно. Можете сделать простой тест, просто переименуйте свой id-атрибут, чтобы сказать contactId и создать геттеры и сеттеры, соответственно измените Contact.hbm.xml и посмотрите, не жалуется ли hibernate на невозможность использования метода getter для нового атрибута. Как это чувство есть некоторые проект очистки Выпуск

С уважением,

+0

Это сработало. 'id', по-видимому, не является хорошим именем для первичного ключа. – ryvantage

0

Не пытайтесь решить. Измените имя столбца id на «cid» или «contact_id» или что хотите.

Смежные вопросы