CrudRepository上的NullPointerException

时间:2017-05-17 08:44:35

标签: java spring repository spring-data-jpa

我创建了一个存储库但是当我调用我的存储库时,它每次都会产生一个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

2 个答案:

答案 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