Hibernate中通过annotaion配置SQLServer的存储过程

环境:hibernate 3.3.1 +spring 2.5.6+ sql server 2005

 

首先,上spring的hibernate配置

 

<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
		p:dataSource-ref="dataSource">
		<property name="hibernateProperties">
			<props>
				 
				<!-- SQLServer DIALECT -->
				<prop key="hibernate.dialect">
					org.hibernate.dialect.SQLServerDialect
             </prop>

				 
				<prop key="hibernate.show_sql">true</prop>
			</props>
		</property>

		<property name="annotatedClasses">
			<list>
				<value>
					com.bean.Contact
               </value>
				
			</list>
		</property>
 


	</bean>

 

这里没有使用自动搜索·通过下面代码配置实例化类·

<property name="annotatedClasses">
			<list>
				<value>
					com.bean.Contact
               </value>
				
			</list>
</property>

 下一步 Contact类代码:

import javax.persistence.Entity;
import javax.persistence.EntityResult;
import javax.persistence.NamedNativeQuery;
import javax.persistence.SqlResultSetMapping;


@Entity
@SqlResultSetMapping(name = "ContactMapping", entities = @EntityResult(entityClass = Contact.class))
@NamedNativeQuery(name = "ContactQuery", query = "{call GetContact(?,?)}", resultSetMapping = "ContactMapping")
public class Contact{

...........

}

 其中:

 

     1 ContactQuery是可执行的查询名字·以后要在getNamedQuery()方法中用到·

     2 ContactMapping是执行结果集和类的对应表,这里结果集的列名和类的属性名一致·所以就隐含设置了·

     3 {call GetContact(?,?)} ·GetContact是存储过程的名字·(?,?)是指有两个参数

     4 注意上面的引用包·用hibernate的包会出错·

 

  再来看看DAO类的代码:

 

Query query = getSession().getNamedQuery("ContactQuery");
query.setString(0, ID);
query.setString(1, date);
List<Contact> ContactList= query.list();

 其中:

 

1 getSession().getNamedQuery("ContactQuery")调用的就是在annotation里定义的名子

2 通过query.setString()设置存储过程的参数

 

PS:在网上查资料时看到有说这存储过程是必须要有返回结果集的·

你可能感兴趣的:(spring,sql,sql,Hibernate,bean,server)