оператор вставки не работает в спящем режиме - PullRequest
3 голосов
/ 24 августа 2010

Я использую netbeans 6.9 и Hibernate и пытаюсь вставить некоторые значения в базу данных (postgres), но получаю следующее исключение:

INFO: Not binding factory to JNDI, no JNDI name configured
Exception in thread "main" org.hibernate.MappingException: Unknown entity: SELECTPACK.beanClass
        at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:550)
        at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1338)
        at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:98)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
        at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:3

и мой файл hbm.xml указан ниже

<class name="SELECTPACK.beanClass" table="login">
  <id column="id" name="id">
      <generator class="increment"/>
  </id>
  <property name="username" column="username"/>
  <property name="password" column="password"/>
</class>

мой файл cfg.xml указан ниже

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
        <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
        <property name="hibernate.connection.url">jdbc:postgresql://192.168.1.100:54321/postgres</property>
        <property name="hibernate.connection.username">postgres</property>
        <property name="hibernate.connection.password">dbserver</property>
        <property name="hibernate.show_sql">true</property>
        <mapping resource="SELECTPACK/select.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

мой класс поё

package SELECTPACK;

public class beanClass {
    private int id;
    private String username;
    private String password;

    public int getId() {
        return id;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

и слышу, это мой основной класс

package SELECTPACK;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class selectMainClass {

    public static void main(String... args) {
        SessionFactory sessionFact = new Configuration().configure().buildSessionFactory();
        Session ses = sessionFact.openSession();
        Transaction tx = ses.beginTransaction();
        beanClass bean = new beanClass();
        bean.setPassword("hi....");
        bean.setUsername("hi....");
        ses.save(bean);
        tx.commit();
        /*String query = "select * from login";
        Query qry = ses.createQuery(query);
        ArrayList list = (ArrayList) qry.list();
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }*/
        ses.close();
    }
}

Я не понимаю, в чем проблема.

1 Ответ

3 голосов
/ 24 августа 2010

Объект SELECTPACK.beanClass не распознается как действительный объект, и в журнале должна быть предыдущая трассировка стека (при создании SessionFactory), показывающая реальную ошибку.Ищите предыдущий след.Но возможные причины включают в себя:

  • таблица не существует
  • один из сопоставленных столбцов не существует

Помимо этого, у меня естьНесколько незначительных замечаний (которые не являются проблемой):

  • Традиционно пакеты находятся в нижнем регистре (т.е. selectpack);
  • имя класса Java должно начинаться с верхнего регистрабуква (т. е. BeanClass);
  • рекомендуется отобразить класс selectpack.BeanClass в selectpack/BeanClass.hbm.xml файл отображения (для упрощения обслуживания);
  • мое предложение будет использоватьгенератор native в файле сопоставления.

Примерно так: для класса:

package selectpack;

public class BeanClass {
    private int id;
    private String username;
    private String password;

    public int getId() {
        return id;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

И для файла сопоставления:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="selectpack.BeanClass" table="login">
      <id column="id" name="id">
          <generator class="native"/>
      </id>
      <property name="username" column="username"/>
      <property name="password" column="password"/>
    </class>
</hibernate-mapping>

Конечно, обновите hibernate.cfg.xml соответственно:

   <mapping resource="selectpack/BeanClass.hbm.xml"/>

Но, как я уже сказал, эти замечания не имеют прямого отношения к проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...