Hibernate MappingException Неизвестная сущность: $ Proxy2 - PullRequest
2 голосов
/ 15 января 2010

Я использую аннотации Hibernate и имею ОЧЕНЬ базовый объект данных:

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.Id;


@Entity
public class State implements Serializable {
/**
 * 
 */
private static final long serialVersionUID = 1L;

@Id
private String stateCode;

private String stateFullName;

public String getStateCode() {
    return stateCode;
}
public void setStateCode(String stateCode) {
    this.stateCode = stateCode;
}
public String getStateFullName() {
    return stateFullName;
}
public void setStateFullName(String stateFullName) {
    this.stateFullName = stateFullName;
}   

}

и пытаюсь запустить следующий тестовый пример:

public void testCreateState(){
    Session s = HibernateUtil.getSessionFactory().getCurrentSession();

    Transaction t = s.beginTransaction();

    State state = new State();
    state.setStateCode("NE");
    state.setStateFullName("Nebraska");

    s.save(s);

    t.commit();

}

и получите

org.hibernate.MappingException: Unknown entity: $Proxy2
    at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:628)
    at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1366)
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
    ....

Мне не удалось найти что-либо, ссылающееся на часть ошибки $ Proxy, - и я в растерянности. Любые указатели на то, что я пропускаю, будут высоко оценены.

hibernate.cfg.xml

<property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="connection.url">jdbc:hsqldb:hsql://localhost/xdb</property>
<property name="connection.username">sa</property>
<property name="connection.password"></property>

<property name="current_session_context_class">thread</property>

<property name="dialect">org.hibernate.dialect.HSQLDialect</property>

<property name="show_sql">true</property>

<property name="hbm2ddl.auto">update</property>

<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>

<mapping class="com.test.domain.State"/>

в HibernateUtil.java

public static SessionFactory getSessionFactory(boolean testing ) {

    if ( sessionFactory == null ){
        try {


            String configPath = HIBERNATE_CFG;


            AnnotationConfiguration config = new AnnotationConfiguration();
            config.configure(configPath);
            sessionFactory = config.buildSessionFactory();
        } catch (Exception e){
            e.printStackTrace();
            throw new ExceptionInInitializerError(e);
        }
    }

    return sessionFactory;
}

Ответы [ 3 ]

0 голосов
/ 16 марта 2010

Моя идея такова: возможно, вам придется изменить аннотацию @Id в коде состояния на @NaturalId. Я думаю, что @Id относится к автоматически генерируемым идентификаторам, что также упоминается в сообщении об ошибке.

0 голосов
/ 02 мая 2010

Я получаю то же сообщение об ошибке. Это вам не поможет, но я все равно опубликую решение моей проблемы для других, кто сталкивается с этим постом.

Это не работает:

import org.hibernate.annotations.Entity;

Это работает:

import javax.persistence.Entity;
0 голосов
/ 15 января 2010

Каков вывод вашего приложения, если вы измените код на следующий

Transaction t = s.beginTransaction();

State state = new State();
System.out.println(state.getClass().getName());
state.setStateCode("NE");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...