我创建了一个存储库但是当我调用我的存储库时,它每次都会产生一个NullPointerException。有人可以帮我找出原因吗?
我的存储库
@Repository
public interface WorkflowObjectRepository extends CrudRepository<WorkflowObject, String> {
@Override
WorkflowObject findOne(String id);
@Override
void delete(WorkflowObject workflowObject);
@Override
void delete(String id);
@Override
WorkflowObject save(WorkflowObject workflowObject);
}
我的对象
@Data
@Entity
@Table(name = "workflowobject")
public class WorkflowObject {
@GeneratedValue
@Column(name="id")
private String id;
@Column(name = "state_name")
private String stateName;
}
我的测试
public class Test {
@Autowired
static WorkflowObjectRepository subject;
public static void main(String[] args) {
final WorkflowObject obj = new WorkflowObject();
obj.setId("maha");
obj.setStateName("test");
subject.findOne("maha");
}
}
application.properties
spring.datasource.url=jdbc:postgresql://localhost:5432/vtr?
autoReconnect=true
spring.datasource.username=vtr
spring.datasource.password=vtr
答案 0 :(得分:1)
问题是您正在尝试自动装配静态数据成员
@Autowired
static WorkflowObjectRepository subject;
在你的情况下发生的事情是static在bean之前被初始化,所以你在null上自动装配,只需删除静态并将其作为实例变量处理。
存储库是单例,因此没有必要使它们成为静态
答案 1 :(得分:0)
为了与@Autowired
一起正常工作,您需要记住spring扫描注解以允许自动加载类。
如果您需要@Autowired
某个类,则类Test
需要具有一些注释,该注释会告诉Spring Boot找到它。
您的Test
类需要具有@Component
,@Service
,@Controller
,@Repository
等。否则,@Autowired
将无法工作,因为Spring引导程序不知道您的班级,因此不会对其进行处理。
您可以找到一些解释here