在使用jsf+Spring+Hibernate做项目时,发现配置Hibernate的实体映射文件相当繁琐.前段时间做EJB时,一直采用的是JPA的注解方式.相比较之下,少写不少代码.于是花了些时间.将项目中原来使用xml配置的方式转成使用Annotation方式.记录如下:

    <!-- Hibernate session factory -->
    <!-- For using no-Annotation 
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    -->
    <!-- using for Annotation -->
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

注:为了使用Annotation,需将原HibernateSessionFactory.xml中sessionFactory的实现类改成:org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean

        <!-- 
        <property name="mappingResources"> 
            <list> 
                <value>com/singtel/config/hibernate/Customer.hbm.xml </value>
            </list> 
        </property> 
        -->
        <!-- Using for Annotation -->
        <property name="annotatedClasses">
            <list>
                <value>com.singtel.system.model.Customer</value>
            </list>
        </property>

注:原来使用mappingResources来配对hbm.xml文件,现用annotatedClasses来直接映射到指定Class.

Or:也可通过通配符来自动扫描类包

<property name="packagesToScan">
       <list>
            <value>com.singtel.system.model.*</value>
        </list>
      </property>

注:packagesToScan是Spring 2.5.6新特性(推荐)

接下来要做的就是在java实体中增加注解.

package com.singtel.system.model;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity(name="Customer")
@Table(name="CUSTOMER_LWC")
public class Customer implements Serializable{
    @Id
    @Column(name="CUSTOMER_ID",columnDefinition = "Integer")
    @GeneratedValue(strategy = GenerationType.AUTO)
    public long customerId;
    
    @Column(name="CUSTOMER_ADDRESS",columnDefinition = "varchar2(255)", nullable = false)
    public String address;
    
    @Column(name="CUSTOMER_PASSWORD",columnDefinition = "varchar2(45)", nullable = false)
    public String password;
    
    @Column(name = "CREATED_DATE", nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    public Date createdDate;
    
    public long getCustomerId() {
        return customerId;
    }
    public void setCustomerId(long customerId) {
        this.customerId = customerId;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public Date getCreatedDate() {
        return createdDate;
    }
    public void setCreatedDate(Date createdDate) {
        this.createdDate = createdDate;
    }
    
}

删除原有hbm.xml.Ok

posted on 2012-04-22 20:07  七月逆流  阅读(492)  评论(0)    收藏  举报