Exception in thread "main" org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: org.hibernate.collection.PersistentSet; nested exception is org.hibernate.MappingException: Unknown entity: org.hibernate.collection.PersistentSet
Caused by: org.hibernate.MappingException: Unknown entity: org.hibernate.collection.PersistentSet
at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:548)
at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1338)
at org.hibernate.event.def.DefaultLockEventListener.onLock(DefaultLockEventListener.java:50)
at org.hibernate.impl.SessionImpl.fireLock(SessionImpl.java:584)
at org.hibernate.impl.SessionImpl.lock(SessionImpl.java:576)
at org.springframework.orm.hibernate3.HibernateTemplate$10.doInHibernate(HibernateTemplate.java:611)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:369)
at org.springframework.orm.hibernate3.HibernateTemplate.lock(HibernateTemplate.java:609)
at com.max.msp.datamanagement.util.HibernateUtil.initialize(HibernateUtil.java:8)
at com.max.msp.datamanagement.util.HibernateUtil$$FastClassByCGLIB$$30aa0bee.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:693)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:139)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:628)
at com.max.msp.datamanagement.util.HibernateUtil$$EnhancerByCGLIB$$d352271c.initialize(<generated>)
at com.max.msp.datamanagement.test.UserTest.main(UserTest.java:43)

解决方案 »

  1.   

    http://www.javaeye.com/topic/108634,你看看,还有就是你的关联配置文件呢?
      

  2.   

    Unknown entity: org.hibernate.collection.PersistentSetPersistentSet是不是这个类没有引入
      

  3.   

    这是user.hbm.xml<?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 
    package="com.max.msp.datamanagement.user"> <class name="User" table="M_USER" lazy="true">

        <id name="username" type="string" column="USERNAME">      
        <generator class="assigned" />
        </id>   


    <property name="password" type="string" />

    <property name="encryptedPassword" type="string"/>

    <property name="name" type="string"/>

    <property name="email" type="string"/>

    <property name="mobile" type="string"/>

    <property name="creationDate" access="field" type="string" not-null="true"/>

    <property name="modificationDate" access="field" type="string" not-null="true"/>

    <many-to-one name="channel"
    class="com.max.msp.datamanagement.service.Channel"
    column="channelId" not-null="true" />

    <property name="from" type="string" column="FROM_LOC"/>

    <set name="subscribers" inverse="true"  cascade="all" lazy="true" >
    <key column="username"/>
    <one-to-many class="com.max.msp.datamanagement.subscriber.Subscriber"  />
    </set>

    </class>
    </hibernate-mapping>
      

  4.   

    这个是subscriber.hbm.xml<?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 
    package="com.max.msp.datamanagement.subscriber"> <class name="Subscriber" table="SUBSCRIBER" lazy="true">

        <id name="subscriberId" type="long" column="SUBSCRIBERID" unsaved-value="null">      
        <generator class="native" />
        </id>    <many-to-one name="user" class="com.max.msp.datamanagement.user.User" column="username" not-null="true"/>

    <many-to-one name="service" class="com.max.msp.datamanagement.service.Service" column="serviceId" not-null="true"/>

    <property name="serviceUsername" type="string" />

    <property name="servicePassword" type="string"/>

    <property name="serviceCookie" type="string"/>

    <property name="creationDate" access="field" type="string"/>

    </class>
    </hibernate-mapping>
      

  5.   

    你的XX.HBM.XML文件中的<set>元素配置错误,请仔细检查你的实体映射文件....
      

  6.   

    <key>元素指向的应该是另外一个实体的主键...
      

  7.   

    没有,我把 lazy =“true”  改为  lazy =“false”  就不报错了。   问题应该不在这
      

  8.   

    不是LAZY的问题,是你映射的关系不对!你的映射应该是对外键表的ID映射,你不能对其他字段映射...
      

  9.   


    <set name="subscribers" inverse="true" cascade="all" lazy="true" >
    <key column="username"/>
    <one-to-many class="com.max.msp.datamanagement.subscriber.Subscriber" />
    </set> 
    <many-to-one name="service" class="com.max.msp.datamanagement.service.Service" column="serviceId" not-null="true"/>这个serviceId好像没有关联对象,是不是在<set ></set>里漏了
      

  10.   

    这个是和另外一个表的关联,这次问题不在这,在set
      

  11.   

    <key column="username"/>
    改为:
    <key column="serviceId"/>
      

  12.   


    和我的问题一样,但他说的解决方法 是     “
    如果是因为这个原因造成的,我会考虑使用Spring的OpenSessionInView来解决
    多说一句:使用了OpenSessionInView,通常还得使用Spring的声明式事务 ”但我现在是单元测试,还没到上面的模块,我仅仅是测 hibernate这一块