Spring 3..0.5 + hierbnate 3.6.6.final + jboss as 7数据库访问
我正在将我们的项目从spring 2.5.6,hibernate 3.3.2,jboss 4.2升级到Spring 3..0.5 + hierbnate 3.6.6.final + jboss as 7 。
那里有很多问题,我决定写一个简单的项目,并在jboss as7(使用Spring 3..0.5 + hierbnate 3.6.6.final)开始时将其删除。 该项目非常简单:DAO类将访问MYSQL数据库。 但是当它的entityManager尝试访问数据库时,应用程序失败,抛出“抛出exception:org.hibernate.MappingException:未知实体”。
以下是我的项目:
我的web控制器类:
package com.yan.testing.web.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.yan.testing.jpa.dao.IYanDao; import com.yan.testing.jpa.entity.Yan; @Controller public class WebController { @Autowired IYanDao yanDao; @RequestMapping("sayHello.do") public String SayHello(){ Yan yan = yanDao.findById(1L); System.out.println(yan.getName()); return "sayHello"; } }
我的DAO接口:
package com.yan.testing.jpa.dao; import com.yan.testing.jpa.entity.Yan; public interface IYanDao { Yan findById(Long id); }
在我的DAO课程中:
package com.yan.testing.jpa.dao.impl; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.springframework.stereotype.Repository; import com.yan.testing.jpa.dao.IYanDao; import com.yan.testing.jpa.entity.Yan; @Repository(value="yanDao") public class YanDao implements IYanDao{ private EntityManager entityManager; @PersistenceContext public void setEntityManager(EntityManager entityManager) { this.entityManager = entityManager; } public Yan findById(Long id){ return entityManager.find(Yan.class, id); } }
问题出在这里: "entityManager.find(Yan.class, id);"
抛出exception:
Servlet.service() for servlet spring threw exception: org.hibernate.MappingException: Unknown entity: com.yan.testing.jpa.entity.Yan
好像hibernate不认识我的实体。 由于我的实体是使用Jboss工具生成的,我在实体类中找不到任何错误。
下面是我的实体类:
package com.yan.testing.jpa.entity; // default package // Generated Jul 27, 2011 4:15:52 PM by Hibernate Tools 3.4.0.CR1 import static javax.persistence.GenerationType.IDENTITY; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; /** * Yan generated by hbm2java */ @Entity @Table(name = "yan", catalog = "fuhu_app_submission") public class Yan implements java.io.Serializable { private static final long serialVersionUID = -6812001362936479032L; private Integer objId; private String name; public Yan() { } public Yan(String name) { this.name = name; } @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "obj_id", unique = true, nullable = false) public Integer getObjId() { return this.objId; } public void setObjId(Integer objId) { this.objId = objId; } @Column(name = "name", length = 45) public String getName() { return this.name; } public void setName(String name) { this.name = name; } }
下面是我的应用程序和jboss作为7配置:
applicationContext.xml(基本上定义了entityManagerFactory bean)
JPA – persistence.xml中:
Hibernate for JPA
我的jboss confi standalone.xml:
jdbc:mysql://127.0.0.1:3306/my_schema com.mysql TRANSACTION_READ_COMMITTED root root 32 com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
任何帮助或提示都表示赞赏。
谢谢
安德鲁
jpa-persistence.xml
什么样的?
您需要使用
元素列出要使用EntityManager映射的
。
@yzandrew:如果您不想在persistence.xml中添加每个实体类,它需要实体管理器工厂bean的属性“packagesToScan”。
实际上你甚至不需要persistence.xml,但这取决于你是否想要走那条路。
也发布全class。 错误基本上是说jpa找不到你的class级。