当前位置: 代码迷 >> J2EE >> 关于java project 使用spring hibernate框架,service获取不到的有关问题
  详细解决方案

关于java project 使用spring hibernate框架,service获取不到的有关问题

热度:32   发布时间:2016-04-17 23:01:06.0
关于java project 使用spring hibernate框架,service获取不到的问题
本帖最后由 xc_feizi 于 2014-03-15 21:22:38 编辑
我新建了一个java project工程,使用spring hibernate等技术。
spring applicationContext.xml配置文件如下:
<!-- autodetect在byType和constructor之间自动的选择注入方式 -->
<!-- 定义实体管理器工厂-->
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
         <!-- 指定META-INF下persistence.xml所配置的-->
         <property name="persistenceUnitName" value="VMS" /> 
         <!-- <property name="persistenceXmlLocation" value="classpath:maps-persistence.xml" /> -->
         
    </bean>
    
    <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
 
  <!-- 启用 annotation事务注解-->
    <tx:annotation-driven transaction-manager="transactionManager"/> 
    
    <!-- 配置Spring Data JPA扫描目录扫描所有的数据操作类-->
  <jpa:repositories base-package="com.cnpc.vms.dao" entity-manager-factory-ref="entityManagerFactory"  transaction-manager-ref="transactionManager"/>


数据库配置文件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_1_0.xsd"
             version="1.0">
   <!-- transaction-type 可选值有: JTA、RESOURCE_LOCAL ;   
    在Java EE 环境下默认值为JTA, 在Java SE 环境下默认值为RESOURCE_LOCAL;   
    如果值为JTA的话, 则必须要指定<jta-data-source>的值 --> 
    <persistence-unit name="VMS" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/>
            <property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
            <property name="hibernate.connection.username" value="c5web"/>
            <property name="hibernate.connection.password" value="c5web"/>
            <property name="hibernate.show_sql" value="true" />
            <!-- 服务模式
            <property name="hibernate.connection.url" value="jdbc:h2:tcp://localhost/~/test"/> 
             -->
            <!-- 内钳与TCP服务模式混用
            <property name="hibernate.connection.url" value="jdbc:h2:file:D:/data/smartcodeDB;AUTO_SERVER=TRUE"/>
             -->
            <property name="hibernate.connection.url" value="jdbc:oracle:thin:@10.185.161.74:1521:c5testdb"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
           
            <!-- 最小连接数 -->    
<property name="c3p0.min_size" value="5"/>     
<!-- 最大连接数 -->     
<property name="c3p0.max_size" value="30"/>    
<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->     
<property name="c3p0.maxIdleTime" value="60"/>    
<!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->    
<property name="c3p0.timeout" value="1800"/>     
<!-- 最大的PreparedStatement的数量 -->    
<property name="c3p0.max_statements" value="50"/>    
<!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒-->    
<property name="c3p0.idle_test_period" value="120"/>      
<!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->    
<property name="c3p0.acquire_increment" value="1"/>    
<!-- 是否每次都验证连接是否可用 -->    
<property name="c3p0.validate" value="false"/>
        </properties>
    </persistence-unit>
</persistence>

DAO文件:AlcorTCitysDAO 
/**********************************************************
 * Dao类请继承BaseRepository接口
 * 类名规范:{实体名}DAO
 * 扩展的数据操作方法请按照spring data jpa规范在此接口中完成
 *********************************************************/
public interface AlcorTCitysDAO extends BaseRepository<AlcorTCitys, Long>{
@Transactional(readOnly=true)
public List<AlcorTCitys> findByCityName(String name);
}

service实现类:AlcorTCitysServiceImpl 
@Service("Service")
public class AlcorTCitysServiceImpl implements IAlcorTCitysService {
@Autowired
public AlcorTCitysDAO alcorTCitysDAO;

public List<AlcorTCitys> findByName(String name) {
return alcorTCitysDAO.findByCityName(name);
}


实体类:AlcorTCitys  
@Entity
@Table(name = "alcor_t_citys")
public class AlcorTCitys  implements java.io.Serializable{
private static final long serialVersionUID = 1731325041814156320L;
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;
@Column(name = "cityCode")
private String cityCode;
@Column(name = "cityName")
private String cityName;


public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCityCode() {
return cityCode;
}
public void setCityCode(String cityCode) {
this.cityCode = cityCode;
}

public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
}


action类:AlcorTCitysAction 
@Controller
public class AlcorTCitysAction {
    @Autowired
    @Qualifier("Service")
    private IAlcorTCitysService service;
    
    public List<AlcorTCitys> getList(String name){
    
     List<AlcorTCitys> ac = service.findByName(name);
return ac;
    }
    public static void main(String[] args) throws Exception {
     ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "classpath:applicationContext.xml" });
context.start();
//System.in.read();
     AlcorTCitysAction aca = new AlcorTCitysAction();
     List<AlcorTCitys> ac = aca.getList("北京");
     if(ac.size() > 0){
    
     System.out.println(ac.get(0).getCityName());
     System.out.println(ac.get(0).getCityCode());
     System.out.println(ac.get(0).getId());
     }
}
}

运行main方法:IAlcorTCitysService service 这个是null,不知道怎么回事?spring没有注入成功?
java.lang.NullPointerException
at com.cnpc.vms.main.AlcorTCitysAction.getList(AlcorTCitysAction.java:31)
at com.cnpc.vms.main.AlcorTCitysAction.main(AlcorTCitysAction.java:40)
------解决思路----------------------
看你Spring配置文件,没有自动装配Bean的配置,比如:<context:component-scan base-package="com.cnpc.vms"/>
  相关解决方案