Skip to content
springside edited this page Feb 29, 2012 · 29 revisions

Spring Data JPA

使用Spring Data JPA,只要编写接口就够了,CRUD方法啦,分页啦,自动将findByLoginName()的方法定义翻译成适当的QL啦:

	public interface UserDao extends PagingAndSortingRepository<User, Long> {
		User findByLoginName(String loginName);
	}

使用上很简单,快速浏览一下它的文档就够了

http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/

只有一个坑爹的地方,如果要为UserDao扩展方法,会新增一个UserDaoCustom接口,这时候,实现类的名字必须是UserDaoImpl,而不是UserDaoCustomImpl。

另外,除了智能地翻译连Less,Not,And,Or都支持的方法名,它当然也可以直接用@Query在方法上标注复杂的查询语句。

JPA

NamingStrategy

数据库的表名,列名与Entity对应的规则,最常见的一个需求是把LOGIN_NAME翻译成loginName,Hibernate提供了ImprovedNamingStrategy, 在JPA中可以这样设置:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
	<property name="jpaProperties">
		<props>
			<prop key="hibernate.dialect">${hibernate.dialect}</prop>
			<prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
		</props>
	</property>
</bean>