Java org.hibernate.MappingException:未知实体-尽管我的实体拥有它所需要的一切

Java org.hibernate.MappingException:未知实体-尽管我的实体拥有它所需要的一切,java,hibernate,spring,Java,Hibernate,Spring,我正在尝试向SpringWeb应用程序添加一些Hibernate功能。这是我第一次使用Hibernate会话工厂,以某种方式独立于Spring(我使用Hibernate模板,工作正常)。现在我得到了这些异常org.hibernate.MappingException:Unknown entity,尽管我认为这些组件连接良好。但是说够了,让我们向您展示代码: 实体类: @Entity // javax.persistence.Entity; @Table(name = "Creazione

我正在尝试向SpringWeb应用程序添加一些Hibernate功能。这是我第一次使用Hibernate会话工厂,以某种方式独立于Spring(我使用Hibernate模板,工作正常)。现在我得到了这些异常
org.hibernate.MappingException:Unknown entity
,尽管我认为这些组件连接良好。但是说够了,让我们向您展示代码:

实体类:

    @Entity // javax.persistence.Entity;
@Table(name = "CreazioneV49_Users")
public class User implements Serializable {

    private long id;
    private String name;
    private String sessionId;

    @Id
    @GeneratedValue
    @Column(name = "USER_ID")
    public long getId() {
        return id;
    }

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

    @Column(name = "USER_NAME")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Column(name = "USER_SESSIONID")
    public String getSessionId() {
        return sessionId;
    }

    public void setSessionId(String sessionId) {
        this.sessionId = sessionId;
    }
}
存储库类:

@Repository
@Transactional
public class DBUtil implements DBUtilInterface {

    @Autowired
    @Qualifier("mySessionFactory")
    private SessionFactory sessionFactory;

    private Session currentSession() {
        return sessionFactory.getCurrentSession();
    }

    public void addUser(User user){
        currentSession().save(user);
    }
}
SpringBean组件:

@Component
@Scope(value = "session")
public class CreateV49 implements Serializable {

    @Autowired
    private DBUtilInterface dbUtil;

    public DBUtilInterface getDbUtil() {
        return dbUtil;
    }

    public void setDbUtil(DBUtil dbUtil) {
        this.dbUtil = dbUtil;
    }

    public void persistData(){
    User user = new User();
    user.setName("Gigel");
    user.setSessionId("1545645645646");
    dbUtil.addUser(user);
    System.out.println("GOOOD");
}
applicationContext.xml的一部分

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@//172.28.233.107:1521/SLRFORM"/>
        <property name="username" value="selir"/>
        <property name="password" value="selir1"/>
        <property name="maxActive" value="10" />
        <property name="initialSize" value="5" />

    </bean>

    <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="myDataSource" />
        <property name="annotatedPackages">
            <list>
                <value>creazione.persistence</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">create</prop>
            </props>
        </property>
    </bean>

    <bean id="txManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref local="mySessionFactory" />
        </property>
    </bean>
    <tx:annotation-driven transaction-manager="txManager"/>

    <aop:aspectj-autoproxy/>
我现在将尝试使用
而不是软件包。。。虽然工作起来会很奇怪

看来带注释的类是有效的。。。用户bean已被识别,但我遇到了一个奇怪的错误,尽管我的ID是自动生成的:

Hibernate: insert into CreazioneV49_Users (USER_ID, USER_NAME, USER_SESSIONID) values (null, ?, ?)
Nov 16, 2011 10:44:21 AM org.hibernate.util.JDBCExceptionReporter logExceptions
WARNING: SQL Error: 1400, SQLState: 23000
Nov 16, 2011 10:44:21 AM org.hibernate.util.JDBCExceptionReporter logExceptions
SEVERE: ORA-01400: cannot insert NULL into ("SELIR"."CREAZIONEV49_USERS"."USER_ID")
我正在使用Oracle,因此我在User bean中将序列生成器添加到我的ID中,但没有成功:

@Id
@SequenceGenerator(name = "my-creazioneV49Seq", sequenceName = "creazioneV49Seq")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "my-creazioneV49Seq")
@Column(name = "USER_ID")
public long getId() {
    return id;
}

已解决:升级到HIBERNATE 3.6.8,并将方言更改为ORACLE

您需要一个
persistence.xml
来列出应该映射的类,或者需要一个
orm.xml
和一个package标记来命名实体类所在的包。

我想您需要尝试一下

 <property name="annotatedClasses">
  <list>
    <value>creazione.persistence.User</value>

     </list>
</property>

creazione.persistence.User

你的
persistence.xml中有什么?@CodeBrickie我没有。正如你所看到的,我只使用注释。“拥有它所需要的一切”是一个太强的语句。。。再检查一遍!你试过使用test.package.Foo test.package.Bar吗?你能粘贴完整的stacktrace吗?实际上他应该使用
javax.persistence.Entity
,这就是为什么我使用注释和Spring类
AnnotationSessionFactoryBean
…来忘记xml(hibernate xml)在这种情况下,没有任何XML是不行的。我已经见过很多人被它咬了。annotatedPackages仅用于package-info.java。packagesToScan可以用来代替逐个添加类。
 <property name="annotatedClasses">
  <list>
    <value>creazione.persistence.User</value>

     </list>
</property>