【问题标题】:Cannot access org.springframework.data from my Java Classes无法从我的 Java 类访问 org.springframework.data
【发布时间】:2018-10-19 02:32:21
【问题描述】:

我正在编写一个在线教程,在我需要使用数据库和添加 jpa 的步骤中,我无法在我的项目中访问它。

我已成功地将依赖项放入我的 pom.xml 文件中,并且没有收到任何错误。我还可以通过我的 application.properties 文件访问 spring jpa。问题是,当我想扩展 CrudRepository 时,它没有被识别......然后我意识到当我去手动导入时,它不会导入 org.springframework.data。

我已将 maven 设置为始终更新快照。

这是我的 pom.xml 文件。我为格式道歉,但我无法使用 intellij 的正确格式将其全部显示在 stackoverflow 上:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/   XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/  maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo3</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo3</name>
<description>Demo project for Spring Boot</description>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>

<dependencies>

    <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

还有我的“application.properties”文件:

spring.datasource.url=***    
spring.datasource.username=***
spring.datasource.password=***

spring.jpa.database=MYSQL

spring.jpa.hibernate.ddl-auto = update

spring.jpa.show-sql=false

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

奶酪类:

package com.example.demo.models;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

@Entity
public class Cheese {

    @Id
    @GeneratedValue
    private int id;

    @NotNull
    @Size(min=3, max=20)
    private String name;

    @NotNull
    @Size(min=1, message = "Description must not be empty")
    private String description;


    public Cheese(String name, String description) {
        this.name = name;
        this.description = description;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

CheeseDao(使用 Spring Data/CrudRepository 的接口)

package com.example.demo.models;
import com.example.demo.models.Cheese;


public class CheeseDao extends CrudRepository<Cheese, Integer> {
}

【问题讨论】:

  • 可以在添加CrudRepository的地方添加接口吗?另外,添加您遇到的错误。
  • 只是这样做了...错误是它无法解析 CrudRepository。深入研究后,我发现我无法导入 org.springframework.data
  • 是的,它必须与 spring vresion 相关,因为 CrudRepository 是在 spring 2.0.1 版本中添加的。
  • 你能在哪里成功地构建你的项目?并验证 jpa jar 文件确实存在于您的 .m2 文件夹中

标签: java spring jpa spring-data


【解决方案1】:

将注释添加到您的 DAO,它应该是接口而不是类,

@Repository
public interface CheeseDao extends JpaRepository<Cheese, Integer> {

}

但是,我建议您使用JpaRepository 而不是CrudRepository。详情见this stackoverflow thread

现在您可以从下面的任何带有注释的 spring 类中访问它们,

@Autowired
private CheeseDao cheeseDao;

【讨论】:

    【解决方案2】:

    您似乎缺少休眠实体依赖项,只需在下面添加依赖项即可解决

     <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
        </dependency>
    

    【讨论】:

      【解决方案3】:

      替换

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>mysql-connector-java</artifactId>
      </dependency>
      

      <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
      </dependency>
      

      【讨论】:

        【解决方案4】:

        而不是

        package com.example.demo.models;
        import com.example.demo.models.Cheese;
        
        
        public class CheeseDao extends CrudRepository<Cheese, Integer> {
        }
        

        试试

        package com.example.demo.models;
        import com.example.demo.models.Cheese;
        
        
        public class CheeseDao extends CrudRepository<Object, Integer> {
        }
        

        CrudRepository 需要类型。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-09
          • 2017-08-18
          相关资源
          最近更新 更多