标签: spring-data

Spring Data的MongoTemplate和MongoRepository有什么区别?

我需要编写一个应用程序,我可以使用spring-data和mongodb进行复杂的查询.我一直在使用MongoRepository开始,但在复杂的查询中苦苦寻找示例或实际理解语法.

我在谈论这样的查询:

@Repository
public interface UserRepositoryInterface extends MongoRepository<User, String> {
    List<User> findByEmailOrLastName(String email, String lastName);
}
Run Code Online (Sandbox Code Playgroud)

或者使用基于JSON的查询,我尝试通过反复试验,因为我没有正确的语法.即使在阅读了mongodb文档(由于语法错误而导致的非工作示例).

@Repository
public interface UserRepositoryInterface extends MongoRepository<User, String> {
    @Query("'$or':[{'firstName':{'$regex':?0,'$options':'i'}},{'lastName':{'$regex':?0,'$options':'i'}}]")
    List<User> findByEmailOrFirstnameOrLastnameLike(String searchText);
} 
Run Code Online (Sandbox Code Playgroud)

阅读完所有文档后,似乎mongoTemplate记录得更好MongoRepository.我指的是以下文档:

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

你能告诉我什么更方便,更强大吗?mongoTemplate还是MongoRepository?两者是否同样成熟,或者其中一个缺少比另一个更多的功能?

java spring mongodb spring-data spring-data-mongodb

79
推荐指数
3
解决办法
6万
查看次数

何时使用@RestController vs @RepositoryRestResource

我一直在研究如何使用Spring和REST的各种示例.我们的最终目标是Spring HATEOAS/HAL设置

我已经看到了两种在Spring中呈现REST的不同方法

  1. 通过HATEOAS/HAL控制器内部

  2. 通过@RestController存储库中的内容

我正在努力寻找的是你为什么要使用一个而不是另一个.在尝试实施HAL时哪个最好?

我们的数据库后端是Neo4j.

spring spring-mvc spring-data spring-data-rest spring-hateoas

79
推荐指数
4
解决办法
4万
查看次数

Spring Boot以及如何配置MongoDB的连接细节?

作为Spring Boot的新手,我想知道如何配置MongoDB的连接细节.我尝试了正常的例子但没有覆盖连接细节.

我想指定将要使用的数据库以及运行MongoDB的主机的url/port.

任何提示或提示?

spring mongodb spring-data spring-boot

74
推荐指数
6
解决办法
12万
查看次数

Spring Data JPA将本机查询结果映射到非实体POJO

我有一个带有本机查询的Spring Data存储库方法

@Query(value = "SELECT g.*, gm.* FROM group g LEFT JOIN group_members gm ON g.group_id = gm.group_id and gm.user_id = :userId WHERE g.group_id = :groupId", nativeQuery = true)
    GroupDetails getGroupDetails(@Param("userId") Integer userId, @Param("groupId") Integer groupId);
Run Code Online (Sandbox Code Playgroud)

我想将结果映射到非实体POJO GroupDetails.

是否有可能,如果可以的话,请你提供一个例子吗?

spring hibernate jpa pojo spring-data

69
推荐指数
4
解决办法
9万
查看次数

如何在Spring Data中使用@Transactional?

我刚刚开始研究Spring-data,Hibernate,MySQL,JPA项目.我切换到spring-data,这样我就不用担心手工创建查询了.

我注意到@Transactional当你使用spring-data时不需要使用,因为我也在没有注释的情况下尝试了我的查询.

我应该/不应该使用@Transactional注释的具体原因是什么?

作品:

@Transactional
public List listStudentsBySchool(long id) {
    return repository.findByClasses_School_Id(id);
}
Run Code Online (Sandbox Code Playgroud)

还有效:

public List listStudentsBySchool(long id) {
    return repository.findByClasses_School_Id(id);
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

java spring jpa spring-data spring-data-jpa

68
推荐指数
1
解决办法
7万
查看次数

Spring数据jpa-没有定义名为'entityManagerFactory'的bean; 注入自动连接的依赖项失败

我正在使用spring数据jpa,hibernate,mysql,tomcat7,maven开发应用程序,这就是创建错误.我想弄明白但是我失败了.

错误是在设置构造函数参数时无法解析对bean'entalManagerFactory'的引用; 没有定义名为'entityManagerFactory'的bean; 注入自动连接的依赖项失败

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'initDbService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.wahid.cse.repository.RoleRepository org.wahid.cse.service.InitDbService.roleRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'roleRepository': Cannot create inner bean '(inner bean)#c08f81' of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property 'entityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#c08f81': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' …
Run Code Online (Sandbox Code Playgroud)

java jpa spring-mvc spring-data spring-data-jpa

62
推荐指数
5
解决办法
10万
查看次数

无法在Spring Boot中自动加载@Repository注释接口

我正在开发一个spring boot应用程序,我在这里遇到了一个问题.我正在尝试注入一个@Repository注释接口,它似乎根本不起作用.我收到了这个错误

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springBootRunner': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.pharmacy.persistence.users.dao.UserEntityDao com.pharmacy.config.SpringBootRunner.userEntityDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.pharmacy.persistence.users.dao.UserEntityDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1202)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686)
    at …
Run Code Online (Sandbox Code Playgroud)

spring repository spring-data spring-data-jpa spring-boot

62
推荐指数
8
解决办法
12万
查看次数

crudrepository findBy方法签名有多个in运算符?

我有一个像这样的实体类:

@Entity
@Table(name = "EMAIL")
class Email{
    @Id
    @Column(name = "Id")
    Long id;
    @Column(name = "EMAIL_ID")
    String emailId;
    @Column(name = "PIN_CODE")
    String pincode;
}
Run Code Online (Sandbox Code Playgroud)

如何findBy使用crudrepository spring data jpa为下面的查询编写方法?

select email_id,name from email_details where eamil_id in('mike@gmail.com','ram@gmail.com') and pin_code in('633677','733877')
Run Code Online (Sandbox Code Playgroud)

我期待像下面的spring数据jpa方法但是如何构造它?

List<Email> findBy.....(List<String> emails, List<String> pinCodes);
Run Code Online (Sandbox Code Playgroud)

我想在单个数据库命中中获取电子邮件列表.

java spring spring-data spring-data-jpa

62
推荐指数
1
解决办法
9万
查看次数

为什么在Spring Data JPA Repository上的save()之后使用返回的实例?

这是代码:

@Repository
public interface AccountRepository extends JpaRepository<Account, Long> {}
Run Code Online (Sandbox Code Playgroud)

来自Spring Data JPA项目的JpaRepository.

这是测试代码:

public class JpaAccountRepositoryTest extends JpaRepositoryTest {
    @Inject
    private AccountRepository accountRepository;

    @Inject
    private Account account;

    @Test
    @Transactional
    public void createAccount() {
        Account returnedAccount = accountRepository.save(account);

        System.out.printf("account ID is %d and for returned account ID is %d\n", account.getId(), returnedAccount.getId());
    }
}
Run Code Online (Sandbox Code Playgroud)

结果如下:

account ID is 0 and for returned account ID is 1
Run Code Online (Sandbox Code Playgroud)

这是来自CrudReporsitory.save()javadoc:

保存给定的实体.使用返回的实例进行进一步操作,因为save操作可能已完全更改了实体实例.

以下是Spring Data JPA中SimpleJpaRepository的实际代码:

 @Transactional
    public T save(T entity) { 
            if (entityInformation.isNew(entity)) { …
Run Code Online (Sandbox Code Playgroud)

java spring jpa spring-data spring-data-jpa

55
推荐指数
2
解决办法
5万
查看次数

如何在@Transactional方法中手动强制提交?

我正在使用Spring/Spring-data-JPA,并发现自己需要在单元测试中手动强制提交.我的用例是我正在进行多线程测试,其中我必须使用在生成线程之前持久化的数据.

不幸的是,鉴于测试在一个@Transactional事务中运行,即使是一个flush也没有让它可以被生成的线程访问.

   @Transactional   
   public void testAddAttachment() throws Exception{
        final Contract c1 = contractDOD.getNewTransientContract(15);
        contractRepository.save(c1);

        // Need to commit the saveContract here, but don't know how!                
        em.getTransaction().commit();

        List<Thread> threads = new ArrayList<>();
        for( int i = 0; i < 5; i++){
            final int threadNumber = i; 
            Thread t =  new Thread( new Runnable() {
                @Override
                @Transactional
                public void run() {
                    try {
                        // do stuff here with c1

                        // sleep to ensure that the thread is not …
Run Code Online (Sandbox Code Playgroud)

java spring jpa spring-transactions spring-data

52
推荐指数
3
解决办法
9万
查看次数