2014-04-14 60 views
1

我想添加自定義方法來休眠CrudRepository。我使用它與春天框架。 Documentation表示它是可行的,但示例顯示的接口不擴展Repository基類。休眠庫中的自定義方法

我知道有一個註釋@Query可以定義自定義查詢,但如果我想添加例如Criteria查詢該類?此外,我想方法像findAll留在存儲庫。

這就是我的嘗試。首先我創建存儲庫Post實體:

package foo.bar.repository; 

import foo.bar.model.Post; 
import org.springframework.data.repository.CrudRepository; 

public interface PostRepository extends CrudRepository<Post, Long> { 

} 

然後創建一個擴展接口,並添加我的自定義方法將其抽象實現類:

package foo.bar.repository; 

public abstract class PostRepositoryImpl implements PostRepository { 

    public List<Post> someCustomMethod() { 
     //some logic here 
    } 

} 

做它甚至更多鈔票?也許有其他的方法來做到這一點在休眠。我長期使用Doctrine,這是基於休眠。在那裏,您只需擴展基礎知識庫類並添加所需的方法。

回答

2

我將添加一個執行自定義查詢的自定義方法的示例。我希望我能理解你的問題。

PersonRepository

public interface PostRepository extends CrudRepository<Post, Long>{ 
    List<Post> getPostsOlderThanDate(Date date); 
} 

PersonRepositoryImpl

import org.springframework.data.jpa.repository.support.SimpleJpaRepository; 

import javax.persistence.EntityManager; 
import javax.persistence.TypedQuery; 
import java.util.Date; 
import java.util.List; 

public class PostRepositoryImpl extends SimpleJpaRepository<Post, Long> implements PostRepository { 

    private EntityManager entityManager; 

    public PostRepositoryImpl(EntityManager em) { 
     super(Post.class, em); 
     this.entityManager = em; 
    } 

    @Override 
    public List<Post> getPostsOlderThanDate(Date date) { 
     String query = ""; //create query 
     TypedQuery<Post> typedQuery = entityManager.createQuery(query, Post.class); 
     return typedQuery.getResultList(); 
    } 
} 

您就可以製作的EntityManagerFactory豆(你建立與Hibernate的持久性提供者,或者無論你設置它,它是由你),並將其注入到PersonRepositoryImpl bean的構造函數中。

<bean id="personRepository" class="com.package.PersonRepositoryImpl"> 
    <constructor-arg ref="entityManagerFactory" /> 
</bean> 

這將是步驟,提供了一些自定義的查詢到你的數據庫。

注意:如果你需要幫助建立你的EntityManager只留下給我的評論,我會給你彈簧配置和依賴關係。