dao代码
package org.page.dao.impl;import java.util.List;import javax.annotation.Resource;import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.page.dao.IPageDao;
import org.page.entiy.diagram.Diagram;
import org.page.entiy.page.PageBean;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public class PageDao extends HibernateDaoSupport implements IPageDao{
//@Resource private SessionFactory sessionFactory;
private Session getLocationSession(){
return getHibernateTemplate().getSessionFactory().getCurrentSession();
}
/**
* 查询所有记录
*/
public int getAllRowCount(String hql) {
this.getLocationSession().getTransaction().begin();
int allRow=this.getLocationSession().createQuery(hql).list().size();
this.getLocationSession().getTransaction().commit();
return allRow;
} /**
* 分页查询
*/
public List queryForPag(String hql, int start, int size) {
this.getLocationSession().beginTransaction().begin();
Query query=this.getLocationSession().createQuery(hql);
query.setFirstResult(start);
query.setMaxResults(size);
List list =query.list();
this.getLocationSession().beginTransaction().commit();
return list;
} @Override
public PageBean queryForPage(int pageSize, int page) {
String hql="from Diagram";
int allRow = this.getAllRowCount(hql);
int totalPage = PageBean.countTotalPage(pageSize, allRow);
int size = pageSize;
int start = PageBean.countStart(pageSize, page);
int currentPage = PageBean.countCurrentPage(page);
List list = this.queryForPag(hql, start, size);
PageBean pb = new PageBean();
pb.setAllRow(allRow);
pb.setTotalPage(totalPage);
pb.setCurrentPage(currentPage);
pb.setList(list);
pb.setPageSize(pageSize);
pb.init();
return pb;
}
@Override
public void saveOrUpdate(Diagram diagram) {
this.getLocationSession().beginTransaction();
if(diagram.getID()==null){
this.getLocationSession().save(diagram);
}else{
this.getLocationSession().update(diagram);
}
this.getLocationSession().getTransaction().commit();
} @Override
public void delete(Integer id) {
this.getLocationSession().beginTransaction().begin();
this.getLocationSession().delete(
this.getLocationSession().get(Diagram.class, id));
this.getLocationSession().beginTransaction().commit();
} @Override
public Diagram getDiagram(Integer id) {
this.getLocationSession().beginTransaction().begin();
Diagram diagram=(Diagram)this.getLocationSession().get(Diagram.class, id);
this.getLocationSession().beginTransaction().commit();
return diagram;
}
}
用的oracle数据库
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
" http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="org.page.entiy.diagram.Diagram" table="diagram" >
<id name="ID" type="java.lang.Integer" column="DIAGRAMID">
<generator class="native"/>
</id>
<property name="DDCC" type="java.lang.String">
<column name="DDCC" length="10"></column>
</property>
<property name="CFCC" type="java.lang.String">
<column name="CFCC" length="10"></column>
</property>
<property name="DDFX" type="java.lang.Integer">
<column name="DDFX"></column>
</property>
<property name="CFFX" type="java.lang.Integer">
<column name="CFFX"></column>
</property>
<property name="TDDDSJ" type="java.lang.String">
<column name="TDDDSJ" length="4"></column>
</property>
<property name="TDCFSJ" type="java.lang.String">
<column name="TDCFSJ" length="4"></column>
</property>
<property name="SX" type="java.lang.String">
<column name="SX" length="2"></column>
</property>
<property name="RK" type="java.lang.Integer">
<column name="RK"></column>
</property>
<property name="HG" type="java.lang.Integer">
<column name="HG"></column>
</property>
<property name="TDZYSJ" type="java.lang.Integer">
<column name="TDZYSJ"></column>
</property>
<property name="TDGD" type="java.lang.String">
<column name="TDGD" length="4"></column>
</property>
<property name="SFZM" type="java.lang.String">
<column name="SFZM" length="50"></column>
</property>
<property name="ZDZM" type="java.lang.String">
<column name="ZDZM" length="50"></column>
</property>
<property name="CDWS" type="java.lang.String">
<column name="CDWS" length="10"></column>
</property>
<property name="SFZGD" type="java.lang.Integer">
<column name="SFZGD"></column>
</property>
<property name="YDYKBZ" type="java.lang.Integer">
<column name="YDYKBZ"></column>
</property>
<property name="BZLS" type="java.lang.Integer">
<column name="BZLS"></column>
</property>
<property name="CCLEVEL" type="java.lang.Integer">
<column name="CCLEVEL"></column>
</property>
</class>
</hibernate-mapping>
package org.page.dao.impl;import java.util.List;import javax.annotation.Resource;import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.page.dao.IPageDao;
import org.page.entiy.diagram.Diagram;
import org.page.entiy.page.PageBean;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public class PageDao extends HibernateDaoSupport implements IPageDao{
//@Resource private SessionFactory sessionFactory;
private Session getLocationSession(){
return getHibernateTemplate().getSessionFactory().getCurrentSession();
}
/**
* 查询所有记录
*/
public int getAllRowCount(String hql) {
this.getLocationSession().getTransaction().begin();
int allRow=this.getLocationSession().createQuery(hql).list().size();
this.getLocationSession().getTransaction().commit();
return allRow;
} /**
* 分页查询
*/
public List queryForPag(String hql, int start, int size) {
this.getLocationSession().beginTransaction().begin();
Query query=this.getLocationSession().createQuery(hql);
query.setFirstResult(start);
query.setMaxResults(size);
List list =query.list();
this.getLocationSession().beginTransaction().commit();
return list;
} @Override
public PageBean queryForPage(int pageSize, int page) {
String hql="from Diagram";
int allRow = this.getAllRowCount(hql);
int totalPage = PageBean.countTotalPage(pageSize, allRow);
int size = pageSize;
int start = PageBean.countStart(pageSize, page);
int currentPage = PageBean.countCurrentPage(page);
List list = this.queryForPag(hql, start, size);
PageBean pb = new PageBean();
pb.setAllRow(allRow);
pb.setTotalPage(totalPage);
pb.setCurrentPage(currentPage);
pb.setList(list);
pb.setPageSize(pageSize);
pb.init();
return pb;
}
@Override
public void saveOrUpdate(Diagram diagram) {
this.getLocationSession().beginTransaction();
if(diagram.getID()==null){
this.getLocationSession().save(diagram);
}else{
this.getLocationSession().update(diagram);
}
this.getLocationSession().getTransaction().commit();
} @Override
public void delete(Integer id) {
this.getLocationSession().beginTransaction().begin();
this.getLocationSession().delete(
this.getLocationSession().get(Diagram.class, id));
this.getLocationSession().beginTransaction().commit();
} @Override
public Diagram getDiagram(Integer id) {
this.getLocationSession().beginTransaction().begin();
Diagram diagram=(Diagram)this.getLocationSession().get(Diagram.class, id);
this.getLocationSession().beginTransaction().commit();
return diagram;
}
}
用的oracle数据库
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
" http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="org.page.entiy.diagram.Diagram" table="diagram" >
<id name="ID" type="java.lang.Integer" column="DIAGRAMID">
<generator class="native"/>
</id>
<property name="DDCC" type="java.lang.String">
<column name="DDCC" length="10"></column>
</property>
<property name="CFCC" type="java.lang.String">
<column name="CFCC" length="10"></column>
</property>
<property name="DDFX" type="java.lang.Integer">
<column name="DDFX"></column>
</property>
<property name="CFFX" type="java.lang.Integer">
<column name="CFFX"></column>
</property>
<property name="TDDDSJ" type="java.lang.String">
<column name="TDDDSJ" length="4"></column>
</property>
<property name="TDCFSJ" type="java.lang.String">
<column name="TDCFSJ" length="4"></column>
</property>
<property name="SX" type="java.lang.String">
<column name="SX" length="2"></column>
</property>
<property name="RK" type="java.lang.Integer">
<column name="RK"></column>
</property>
<property name="HG" type="java.lang.Integer">
<column name="HG"></column>
</property>
<property name="TDZYSJ" type="java.lang.Integer">
<column name="TDZYSJ"></column>
</property>
<property name="TDGD" type="java.lang.String">
<column name="TDGD" length="4"></column>
</property>
<property name="SFZM" type="java.lang.String">
<column name="SFZM" length="50"></column>
</property>
<property name="ZDZM" type="java.lang.String">
<column name="ZDZM" length="50"></column>
</property>
<property name="CDWS" type="java.lang.String">
<column name="CDWS" length="10"></column>
</property>
<property name="SFZGD" type="java.lang.Integer">
<column name="SFZGD"></column>
</property>
<property name="YDYKBZ" type="java.lang.Integer">
<column name="YDYKBZ"></column>
</property>
<property name="BZLS" type="java.lang.Integer">
<column name="BZLS"></column>
</property>
<property name="CCLEVEL" type="java.lang.Integer">
<column name="CCLEVEL"></column>
</property>
</class>
</hibernate-mapping>
this.getLocationSession().beginTransaction();
if(diagram.getID()==null){
this.getLocationSession().save(diagram);
}else{
this.getLocationSession().update(diagram);
}
this.getLocationSession().getTransaction().commit();
} this.getLocationSession()这么多次 晕
Session session = this.getLocationSession();
Transaction tran = session .beginTransaction();
应该与数据库查询出的ID比较
如果不存在就save
如果存在先获取数据库对象
然后用setXXX修改对象属性
在update
。。hibernate有逐渐主键生成机制的
LZ这样写虽然有点怪 但是是没错的
或者直接saveorupdate()不用判断了
Transaction tran = session .beginTransaction();
不这样用那怎么用啊
查找是瞬时状态
开启 session.beginTransaction();
提交session.getTransaction().commit();
若spring 则配置<bean id="autoproxy"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 可以是Service或DAO层(最好是针对业务层*Service) -->
<property name="beanNames">
<list>
<!--表示配置所有以Svr结尾的Bean-->
<value>*Service</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
试试。<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<!-- 指定那些方法参与事务 -->
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<!-- 其它方法为只读事务,避免脏数据检查 -->
<prop key="*">readOnly</prop>
</props>
</property>
</bean>
你是2楼那样写的?
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
<property name="username" value="ssh"></property>
<property name="password" value="ssh"></property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.current_session_context_class">thread</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.connection.autocommit">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>org/page/entiy/diagram/Diagram.hbm.xml</value>
</list>
</property>
</bean>
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="*">readOnly</prop>
</props>
</property>
</bean>
<bean id="autoproxy"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>*Service</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
事务配置不成功,启动是不报错,但是事务没有注入进去
但是你处理事务的类确实dao
<property name="beanNames" value="*Service,*Dao" />