Конфигурация аннотации Hibernate с Spring не может найти объект домена - PullRequest
2 голосов
/ 12 августа 2010

У меня проблема с Hibernate, когда мои доменные объекты выполняют настройку аннотаций для Hibernate.

Я получаю

org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [from User u where u.userName=:userName]

Я думал, что всенужно было добавить свойство packagesToScan для sessionFactory и добавить @Entity к объекту домена.Что еще мне не хватает?

<!-- Hibernate SessionFactory -->
<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="com.trx.sample.domain" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
            <prop key="hibernate.generate_statistics">${hibernate.generate_statistics}</prop>
        </props>
    </property>
    <property name="eventListeners">
        <map>
            <entry key="merge">
                <bean
                    class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener" />
            </entry>
        </map>
    </property>
</bean>

<context:annotation-config />
<tx:annotation-driven />

-

package com.trx.sample.domain;

@Entity
@Table(name = "user")
public class User extends BaseEntity implements UserDetails {

  private static final long serialVersionUID = 1L;

  @Column(name = "user_name")
  private String userName;
  private String password;
  private boolean enabled;
  private String roles;

  ...
}

-

@MappedSuperclass
public class BaseEntity implements Serializable {
  private static final long serialVersionUID = 1L;

  @Id
  @GeneratedValue
  private Long id;

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

  public Long getId() {
    return id;
  }

  public boolean isNew() {
    return (this.id == null);
  }
}

-

[INFO] building session factory
[DEBUG] Session factory constructed with filter configurations : {}
[DEBUG] instantiating session factory with properties: {...}
[DEBUG] initializing class SessionFactoryObjectFactory
[DEBUG] registered: 402881e52a6b3159012a6b3163e40000 (unnamed)
[INFO] Not binding factory to JNDI, no JNDI name configured
[DEBUG] instantiated session factory
[DEBUG] Checking 0 named HQL queries
[DEBUG] Checking 0 named SQL queries

Редактировать:

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

Ответы [ 4 ]

1 голос
/ 12 августа 2010

Просто идея: USER является зарезервированным ключевым словом с некоторыми базами данных, возможно, это препятствует правильной инициализации Hibernate.Я предлагаю избежать этого:

package com.trx.sample.domain;

@Entity
@Table(name = "`user`")
public class User extends BaseEntity implements UserDetails {

  private static final long serialVersionUID = 1L;

  @Column(name = "user_name")
  private String userName;
  private String password;
  private boolean enabled;
  private String roles;

  ...
}
1 голос
/ 13 августа 2010

Опуская голову от стыда, я отвечаю Неправильный импорт @Entity.

Этот конкретный объект домена используется

import org.hibernate.annotations.Entity;

когда он должен был использовать

import javax.persistence.Entity;

г!

0 голосов
/ 16 января 2011

Может, тебе не хватает этого?

<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"/>

0 голосов
/ 12 августа 2010

Вы должны установить свойства annotatedClass или packagesToScan в вашем SessionFactoryBean.см. пружинная документация

...