myeclipse8.6,struts2.1,spring3.0,hibernate3.3三个框架集成开发,主要是实体注解时不能形成映射
package com.users.entity;import java.io.Serializable;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="product")
public class Product implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer pid;
private String pname;
private double price;
private String image;
private String produce;
@Id
@Column(name="pid")
public Integer getPid() {
return pid;
}
public void setPid(Integer pid) {
this.pid = pid;
}
@Column(name="pname")
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
@Column(name="price")
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Column(name="image")
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
@Column(name="produce")
public String getProduce() {
return produce;
}
public void setProduce(String produce) {
this.produce = produce;
}
public Product(Integer pid, String pname, double price, String image,
String produce) {
this.pid = pid;
this.pname = pname;
this.price = price;
this.image = image;
this.produce = produce;
}
public Product(){}
}hibernate.cxf.xml中配置
<session-factory>
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="connection.url">jdbc:sqlserver://127.0.0.1:1433;databaseName=users</property>
<property name="connection.username">sa</property>
<property name="connection.password">sa</property>
<property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="myeclipse.connection.profile">users</property>
<property name="show_sql">true</property>
<mapping class="com.users.entity.Product"/>
</session-factory>包有
ejb3.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
这三个都有,其它还有N多包,都是加框架的时候自动给的报错信息是这样的
[DEBUG]2011-11-30 08:11:42org.hibernate.cfg.Configuration-connection.driver_class=com.microsoft.sqlserver.jdbc.SQLServerDriver
[DEBUG]2011-11-30 08:11:42org.hibernate.cfg.Configuration-myeclipse.connection.profile=users
[DEBUG]2011-11-30 08:11:42org.hibernate.cfg.Configuration-show_sql=true
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: An AnnotationConfiguration instance is required to use <mapping class="com.users.entity.Product"/>
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1403)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
[INFO ]2011-11-30 08:11:42org.springframework.beans.factory.support.DefaultListableBeanFactory-Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@19bfb30: defining beans [sessionFactory,commdao,usersDaoImpl,productDaoImpl,usersAction,myHibTxManager,txAdvice,org.springframework.aop.config.internalAutoProxyCreator,serviceMethods,org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0]; root of factory hierarchy
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:545)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:871)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.users.test.Test.main(Test.java:23)
Caused by: org.hibernate.MappingException: An AnnotationConfiguration instance is required to use <mapping class="com.users.entity.Product"/>
at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1648)
at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1603)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1582)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1556)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1491)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:642)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1460)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1400)
... 12 more
package com.users.entity;import java.io.Serializable;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="product")
public class Product implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer pid;
private String pname;
private double price;
private String image;
private String produce;
@Id
@Column(name="pid")
public Integer getPid() {
return pid;
}
public void setPid(Integer pid) {
this.pid = pid;
}
@Column(name="pname")
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
@Column(name="price")
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Column(name="image")
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
@Column(name="produce")
public String getProduce() {
return produce;
}
public void setProduce(String produce) {
this.produce = produce;
}
public Product(Integer pid, String pname, double price, String image,
String produce) {
this.pid = pid;
this.pname = pname;
this.price = price;
this.image = image;
this.produce = produce;
}
public Product(){}
}hibernate.cxf.xml中配置
<session-factory>
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="connection.url">jdbc:sqlserver://127.0.0.1:1433;databaseName=users</property>
<property name="connection.username">sa</property>
<property name="connection.password">sa</property>
<property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="myeclipse.connection.profile">users</property>
<property name="show_sql">true</property>
<mapping class="com.users.entity.Product"/>
</session-factory>包有
ejb3.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
这三个都有,其它还有N多包,都是加框架的时候自动给的报错信息是这样的
[DEBUG]2011-11-30 08:11:42org.hibernate.cfg.Configuration-connection.driver_class=com.microsoft.sqlserver.jdbc.SQLServerDriver
[DEBUG]2011-11-30 08:11:42org.hibernate.cfg.Configuration-myeclipse.connection.profile=users
[DEBUG]2011-11-30 08:11:42org.hibernate.cfg.Configuration-show_sql=true
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: An AnnotationConfiguration instance is required to use <mapping class="com.users.entity.Product"/>
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1403)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
[INFO ]2011-11-30 08:11:42org.springframework.beans.factory.support.DefaultListableBeanFactory-Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@19bfb30: defining beans [sessionFactory,commdao,usersDaoImpl,productDaoImpl,usersAction,myHibTxManager,txAdvice,org.springframework.aop.config.internalAutoProxyCreator,serviceMethods,org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0]; root of factory hierarchy
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:545)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:871)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.users.test.Test.main(Test.java:23)
Caused by: org.hibernate.MappingException: An AnnotationConfiguration instance is required to use <mapping class="com.users.entity.Product"/>
at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1648)
at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1603)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1582)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1556)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1491)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:642)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1460)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1400)
... 12 more
如下:
<property name="mappingResources">
<list>
<value>com/users/entity/Product.hbm.xml</value>
</list>
</property>
解决 方案:将SPRING 的配置文件 装配 SESSIONFACTORY的地方的CLASSorg.springframework.orm.hibernate3.LocalSessionFactoryBean改成org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean检查Spring中sessionFactory中是否引进了hibernate文件<bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="configLocation"value="classpath:hibernate.cfg.xml"></property></bean>
SessionFactory sessionFactory = (SessionFactory) context.getBean("sessionFactory");
Session session = sessionFactory.openSession();
ProductDao productDao = (ProductDao) context.getBean("productDaoImpl");
session.beginTransaction();
List<Product> list = productDao.searchByHql("from Product");
System.out.println(list.size()+"________=+++++++"+list.get(0).getPname());
Product product = new Product();
product.setPname("红樱枪");
product.setPrice(33.4);
product.setImage("2.jpg");
product.setProduce("河南洛阳");
productDao.addProduct(product);
session.beginTransaction().commit();
插入数据时有sql语句,但数据库中没有记录
就写了一句这个这个。。是将该实体映射给哪个表的 没有注明。。配置不完整
事务最好是要放在begin 和 commit 之间
*
*
*
*
t.commit();
<!-- 配置Hibernate拦截器,自动填充数据的插入、更新时间 -->
<property name="entityInterceptor" ref="entityInterceptor" />
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<value>
<!-- 设置数据库方言 -->
hibernate.dialect=${hibernate.dialect}
<!-- 设置自动创建|更新|验证数据库表结构 -->
hibernate.hbm2ddl.auto=update
<!-- 输出SQL语句到控制台 -->
hibernate.show_sql=${hibernate.show_sql}
<!-- 格式化输出到控制台的SQL语句 -->
hibernate.format_sql=${hibernate.format_sql}
<!-- 是否开启二级缓存 -->
hibernate.cache.use_second_level_cache=false
<!-- 配置二级缓存产品 -->
hibernate.cache.provider_class=org.hibernate.cache.OSCacheProvider
<!-- 是否开启查询缓存 -->
hibernate.cache.use_query_cache=false
<!-- 数据库批量查询数 -->
hibernate.jdbc.fetch_size=50
<!-- 数据库批量更新数 -->
hibernate.jdbc.batch_size=30
</value>
</property> <property name="annotatedClasses">
<list>
<value>com.users.entity.Product</value>
</list>
</property>
</bean>
struts.xml中是这样配置的
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.Factory" value="spring"></constant>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<package name="package1" extends="struts-default">
<action name="users" class="usersAction">
<result name="sucpro">/WEB-INF/product/product-list.jsp</result>
</action>
</package>
</struts>
applicationContext.xml中
<bean id="productdaoimpl" class="com.users.dao.impl.ProductDaoImpl">
<property name="commdao" ref="commdao"></property>
</bean>
<bean id="usersAction" class="com.users.action.UsersAction">
<property name="productdao" ref="productdaoimpl"></property>
</bean>
在action中调用时
private ProductDao productdao;
public ProductDao getProductdao() {
return productdao;
}
public void setProductdao(ProductDao productdao) {
this.productdao = productdao;
}
为什么有get set了,还是null
5L 是事务没有配好!
欢迎大家踊跃接分!