原文地址: https://blog.lvcc.top/article-detail?articleId=353
导入
compile 'org.springframework.boot:spring-boot-starter-data-jpa'
增加配置文件
package cn.com.sjfx.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@Configuration
@EnableJpaRepositories("com.example")
public class JpaConfiguration {
}
这样就配置好了, 很简单。
使用
定义实体
实体(对应数据库表中一条记录)User,并使用BaseEntity作为基类(统一id策略)
BaseEntity.java
package com.demo.common;
import com.demo.common.utils.GenerateIDTool;
import lombok.Data;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import java.io.Serializable;
@Data
@MappedSuperclass
public class BaseEntity implements Serializable {
@Id
@GeneratedValue
protected Long id;
}
User.java
package com.demo.data.model;
import com.demo.common.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import javax.persistence.Entity;
import java.util.Date;
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Entity
public class User extends BaseEntity {
private String name;
private String password;
private Date createTime;
private Date updateTime;
}
定义访问接口Repository
package com.demo.data.repository;
import com.demo.data.model.User;
import org.springframework.data.repository.CrudRepository;
public interface UserRepository extends CrudRepository<User, Long> {
}
测试
@Test
public void test_DB() {
User user = new User();
user.setName("aaa");
user.setPassword("password");
user.setCreateTime(new Date());
user.setUpdateTime(new Date());
System.out.println("before save:" + user);
userRepository.save(user);
System.out.println("after save:" + user);
Iterable<User> list = userRepository.findAll();
System.out.println(list);
}
问题
因为之前没有使用@Entity注解,导致报错了:
Error creating bean with name 'com.demo.DBTest': Unsatisfied dependency expressed through field 'userRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.demo.data.repository.UserRepository' available ...
查看日志,可以发现如下记录:
17:35:56.976 [Test worker] INFO org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport - Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.demo.data.repository.UserRepository.
17:35:56.977 [Test worker] INFO org.springframework.data.repository.config.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 52ms. Found 0 repository interfaces.
这个问题是因为我同时使用了spring-data-redis,导致有多个repository candidate, 让spring data 不知道使用哪个好,在实体上加上@Entity注解就好了。