1. META-INF/persistence.xml
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <persistence-unit name="localdb" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/> <property name="hibernate.connection.driver_class" value="net.sourceforge.jtds.jdbc.Driver"/> <property name="hibernate.connection.username" value="sa"/> <property name="hibernate.connection.password" value="123"/> <property name="hibernate.connection.url" value="jdbc:jtds:sqlserver://localhost:1433/CollectionDB;instance="/> <property name="hibernate.max_fetch_depth" value="3"/> <property name="hibernate.format_sql" value="false" /> <property name="hibernate.hbm2ddl.auto" value="none"/> <property name="javax.persistence.validation.mode" value="none"/> <!-- validate --> </properties> </persistence-unit> <persistence-unit name="remotedb" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> <property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver"/> <property name="hibernate.connection.username" value="root"/> <property name="hibernate.connection.password" value="123"/> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/futures?useUnicode=true&characterEncoding=UTF-8"/> <property name="hibernate.max_fetch_depth" value="3"/> <property name="hibernate.format_sql" value="false" /> <property name="hibernate.hbm2ddl.auto" value="none"/> <property name="javax.persistence.validation.mode" value="none"/> </properties> </persistence-unit> </persistence>
2. spring-jpa-hibernate.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"> <!-- scan all beans and inject dependence --> <context:component-scan base-package="com.myproject" /> <bean id="defaultPersistenceUnitManager" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager"> <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" /> <!-- comment dataSourceLooup to use jndi --> <property name="dataSourceLookup"> <bean class="org.springframework.jdbc.datasource.lookup.BeanFactoryDataSourceLookup" /> </property> </bean> <!-- 整合localjpa --> <bean id="localEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="persistenceUnitManager" ref="defaultPersistenceUnitManager"></property> <property name="persistenceUnitName" value="localdb"></property> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="showSql" value="false"></property> <property name="database" value="SQL_SERVER"></property> </bean> </property> </bean> <bean id="localtransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="localEntityManagerFactory" /> <qualifier value="localEM" /> </bean> <tx:annotation-driven transaction-manager="localtransactionManager" proxy-target-class="false" /> <!-- 整合remotejpa --> <bean id="remoteEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="persistenceUnitManager" ref="defaultPersistenceUnitManager"></property> <property name="persistenceUnitName" value="remotedb"></property> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="showSql" value="false"></property> <property name="database" value="MYSQL"></property> </bean> </property> </bean> <bean id="remotetransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="remoteEntityManagerFactory" /> <qualifier value="remoteEM" /> </bean> <tx:annotation-driven transaction-manager="remotetransactionManager" proxy-target-class="false" /> </beans>
3. StockAccountEntity.java
package com.myproject.example.vo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "stockaccount", schema = "")
@SuppressWarnings("serial")
public class StockAccountEntity implements java.io.Serializable {
@Id
@Column(name ="ID",nullable=false,length=40)
private java.lang.String id;
@Column(name ="USERNAME",nullable=true,length=40)
private java.lang.String username;
public java.lang.String getId(){
return this.id;
}
public void setId(java.lang.String id){
this.id = id;
}
public java.lang.String getUsername(){
return this.username;
}
public void setUsername(java.lang.String username){
this.username = username;
}
}
4. StockAccountDao.java
package com.myproject.example.dao;
import java.util.List;
import com.myproject.example.dao.common.MyCriteriaBuilder;
import com.myproject.example.vo.StockAccountEntity;
public interface StockAccountDao {
public List<StockAccountEntity> query(MyCriteriaBuilder cb, int maxResult);
public void update(StockAccountEntity entity);
public void insert(StockAccountEntity entity);
public void delete(StockAccountEntity entity);
public StockAccountEntity queryById(int id);
}
5.StockAccountDaoBean.java
package com.myproject.example.dao.jpa;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.stereotype.Repository;
import com.myproject.example.dao.StockAccountDao;
import com.myproject.example.dao.common.MyCriteriaBuilder;
import com.myproject.example.vo.StockAccountEntity;
@Repository
public class StockAccountDaoBean implements StockAccountDao{
@PersistenceContext(unitName="localdb")
EntityManager em;
@Override
public List query(MyCriteriaBuilder cb, int maxResult) {
String hql = "select a from StockAccountEntity a" + cb.getCriteriaString();
Query q = em.createQuery(hql);
for(String key : cb.getCriteriaParams().keySet()){
q.setParameter(key, cb.getCriteriaParams().get(key));
}
if(maxResult!=0)
q.setMaxResults(maxResult);
return q.getResultList();
}
@Override
public void update(StockAccountEntity entity) {
em.merge(entity);
}
@Override
public void insert(StockAccountEntity entity) {
em.persist(entity);
}
@Override
public void delete(StockAccountEntity entity) {
em.remove(entity);
}
@Override
public StockAccountEntity queryById(int id) {
return em.find(StockAccountEntity.class, id);
}
}
6.StockAccountService.java
package com.myproject.example.service;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.myproject.example.dao.StockCashFlowDao;
import com.myproject.example.dao.common.MyCriteria;
import com.myproject.example.dao.common.MyCriteriaBuilder;
import com.myproject.example.vo.StockCashFlowEntity;
@Service
@Transactional(value="localEM")
public class StockAccountService {
@Resource
private StockAccountDao stockAccountDaoBean;
public List<StockAccountEntity> queryByTradecodeTradedate(String tradeCode, Date lastTradeDate, Date tradeDate){
MyCriteriaBuilder accountCB = new MyCriteriaBuilder();
cashFlowCB.put(MyCriteria.Type_Equil, "tradecode", tradeCode);
cashFlowCB.put(MyCriteria.Type_Bigger, "tradedate", "tradedate1", lastTradeDate);
cashFlowCB.put(MyCriteria.Type_SmallerEquil, "tradedate", "tradedate2", tradeDate);
List<StockAccountEntity> cashFlowList = stockAccountDaoBean.query(accountCB, 0);
return accountList;
}
}