当前位置: 首页 > 知识库问答 >
问题:

用springjpa获取数据

酆阳煦
2023-03-14

我仍然是java和spring的初学者,我已经在mysql中存储了一个名为< code>Offers的表,我试图逐行获取数据< code >其中Status == 0,我的表看起来像这样:

-------------+------------+------------+------------+--------------+--------+--------+--------+--------+--------------+
| Msisdn      | Entry_Date | Start_Date | End_Date   | Service_Type | Status | Parm_1 | Parm_2 | Parm_3 | Process_Date |
+-------------+------------+------------+------------+--------------+--------+--------+--------+--------+--------------+
| 7777777777  | 2019-01-11 | 2019-02-15 | 2019-03-03 | 1            |      1 | 1      | 1      | 1      | 2019-10-15   |
| 7888888899  | 2019-01-11 | 2019-02-12 | 2019-03-03 | 1            |      0 | 1      | 1      | 1      | 2019-10-15   |
| 799999999   | 2019-01-11 | 2019-02-10 | 2019-03-03 | 1            |      0 | 1      | 1      | 1      | 2019-10-15   |
| 79111111111 | 2019-01-28 | 2019-02-27 | 2019-03-03 | 1            |      0 | 1      | 1      | 1      | 2019-10-15   |
+-------------+------------+------------+------------+--------------+--------+--------+--------+--------

当我尝试运行我的代码时,它的返回

org.springframework.beans.factory。BeanCreationException:创建在类路径资源[org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]中定义的名为“entityManagerFactory”的bean时出错:初始化方法调用失败;嵌套异常是org.hhibernate。AnnotationException:未为实体com.example.accessingdatajpa.Offers指定标识符

提供

package com.example.accessingdatajpa;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;


@Entity
public class Offers {

    @GeneratedValue(strategy=GenerationType.AUTO)
    private String Msisdn;
    private String Entry_Date;
    private String Start_Date;
    private String End_Date;
    private String Service_Type;
    private String Status;
    private String Parm_1;
    private String Parm_2;
    private String Parm_3;
    private String Process_Date;

    protected Offers() {}

    public Offers(String Msisdn, String Entry_Date, String Start_Date, String End_Date, String Service_Type, String Status, String Parm_1 ,String Parm_2, String Parm_3, String Process_Date) {
        this.Msisdn = Msisdn;
        this.Entry_Date = Entry_Date;
        this.Start_Date = Start_Date;
        this.End_Date = End_Date;
        this.Service_Type = Service_Type;
        this.Status = Status;
        this.Parm_1 = Parm_1;
        this.Parm_2 = Parm_2;
        this.Parm_3 = Parm_3;
        this.Process_Date = Process_Date;
    }

    @Override
    public String toString() {
        return String.format(
                "Offers[Msisdn='%s', Entry_Date='%s', Start_Date='%s', End_Date='%s', Service_Type='%s', Status='%s', Parm_1='%s', Parm_2='%s', Parm_3='%s',Process_Date='%s']",
                Msisdn, Entry_Date, Start_Date, End_Date, Service_Type, Status, Parm_1,Parm_2,Parm_3,Process_Date);
    }

    public String getMsisdn() {
        return Msisdn;
    }

    public String getProcess_Date() {
        return Process_Date;
    }

    public String getEntry_Date() {
        return Entry_Date;
    }

    public String getStart_Date() {
        return Start_Date;
    }

    public String getEnd_Date() {
        return End_Date;
    }

    public String getService_Type() {
        return Service_Type;
    }

    public String getStatus() {
        return Status;
    }

    public String getParm_1() {
        return Parm_1;
    }

    public String getParm_2() {
        return Parm_2;
    }

    public String getParm_3() {
        return Parm_3;
    }
}

存储库

package com.example.accessingdatajpa;

import java.util.List;

import org.springframework.data.repository.CrudRepository;

public interface OffersRepository extends CrudRepository<Offers, String> {

    List<Offers> findByStatus(String Status);

    Offers findByMsisdn(String Msisdn);
}

访问数据应用程序

package com.example.accessingdatajpa;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class AccessingDataJpaApplication {

    private static final Logger log = LoggerFactory.getLogger(AccessingDataJpaApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(AccessingDataJpaApplication.class);
    }

    @Bean
    public CommandLineRunner demo(OffersRepository repository) {
        return (args) -> {

            // fetch by status =0
            log.info("Offers found with findByStatus('0'):");
            log.info("--------------------------------------------");
            repository.findByStatus("0").forEach(on -> {
                log.info(on.toString());
            });
            log.info("");
        };
    }

}

测试文件

package com.example.accessingdatajpa;

import static org.assertj.core.api.Assertions.assertThat;

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@DataJpaTest
public class OffersRepositoryTests {
    @Autowired
    private TestEntityManager entityManager;

    @Autowired
    private OffersRepository offer;

    @Test
    public void testFindByStatus() {
        Offers Offer = new Offers();
        entityManager.persist(Offer);

        List<Offers> findByStatus = offer.findByStatus(Offer.getStatus());

        assertThat(findByStatus).extracting(Offers::getStatus).containsOnly(Offer.getStatus());
    }
}

共有3个答案

袁宜
2023-03-14

你需要这样做:

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private String Msisdn;
隆钊
2023-03-14

产品/服务没有主键。您必须使用@Id注释主键属性

喜欢

@Id
private Integer id;
卢朝
2023-03-14

我在那里没看到多少错误:

第一

@Id注解添加到msy dn

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private String Msisdn;

第二

将< code>@Repository批注添加到< code>OffersRepository中

@Repository
public interface OffersRepository extends CrudRepository<Offers, String> {

    List<Offers> findByStatus(String Status);

    Offers findByMsisdn(String Msisdn);
}

第三

将类型为< code>OffersRepository的自动连线bean添加到< code > AccessingDataJpaApplication 类中,并从方法< code > public command linerunner demo(offers repository)中移除参数< code > offers repository repository

@SpringBootApplication
public class AccessingDataJpaApplication {

    private static final Logger log = LoggerFactory.getLogger(AccessingDataJpaApplication.class);

    @Autowired
    private OffersRepository repository;

    public static void main(String[] args) {
        SpringApplication.run(AccessingDataJpaApplication.class);
    }

    @Bean
    public CommandLineRunner demo() {
        return (args) -> {

            // fetch by status =0
            log.info("Offers found with findByStatus('0'):");
            log.info("--------------------------------------------");
            repository.findByStatus("0").forEach(on -> {
                log.info(on.toString());
            });
            log.info("");
        };
    }

}

第四

如果你想使用CommandLineRunner,你需要实现它。你可以用一种非常简单的方式完成,只需在你的引导类中实现。

访问DataJpaApplication.java

@SpringBootApplication
public class AccessingDataJpaApplication implements CommandLineRunner {

    @Autowired
    private OffersRepository repository;

    private static final Logger log = LoggerFactory.getLogger(AccessingDataJpaApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(AccessingDataJpaApplication.class);
    }

    @Override
    public void run(String...args) {
        log.info("Offers found with findByStatus('0'):");
        log.info("--------------------------------------------");
        repository.findByStatus("0").forEach(on - >{
            log.info(on.toString());
        });
        log.info("");
    }

}
 类似资料:
  • 我试图写这个来获取列表,我必须将ID列表作为参数传递: 我的实体是我用来查询的实体是: 但我在运行后遇到了以下异常: 有人能帮我用上面的方法获取列表吗?或者能告诉我我在这方面做错了什么。我不想使用本机,即(nativeQuery=true)使用这个。

  • 我正在使用Spring MVC/Security/JPA/Hibernate开发一个web应用程序。 我有一个用户类,它与UserRole有一个omany关系。 UserRole类与用户之间有很多关系。 用户存储库界面非常简单。 当我使用下面的代码片段使用存储库加载用户信息时,它会很好地检索用户和用户角色数据。 这是日志文件。 然而,问题出在这里。 如果我使用UserRepository的save

  • 我开始制作一个简单的spring boot应用程序。 我的第一步是利用Spring JDBC支持,使用默认的H2内存数据库。对于示例数据,我在src/main/resources中有schema.sql和data.sql。 所以当spring启动时,它也会执行这两个脚本并填充H2数据库,我可以通过H2控制台访问它。

  • 我正在通过Vuex商店中的axios从外部API获取数据,它为我提供了一个包含对象的数组——比方说——。 每个都有一个,我需要用它获取城市详细信息。我想将这个details对象作为一个新键添加到数组中。 现在我正在获取所有城市,并使用另一个Vuex操作获取城市详细信息。 所有城市的行动 获取所有城市后的变异 数组中的每个对象都有一个,我正在用它获取这个城市的详细信息。 我试图在动作中循环数组,以获

  • 我有一个使用redux的应用程序 我也曾在本地获取数据。 在我的反应组件中,我使用来获取数据。但我什么也没得到。 如何在我的组件中获取数据? 演示:https://codesandbox.io/s/nervous-rosalind-lp16j?file=/src/App.js:242-328

  • 我试图创建一个chatbot,它向spring-boot应用程序发出get请求,而spring boot应用程序向Dialogflow V2发出API调用。我试图通过GRPC访问Dialogflow V2 API。我已经创建了一个服务帐户和导出服务帐户密钥文件,并将其添加到spring-boot应用程序中。 当我试图从spring-boot应用程序向dialogflow发送请求时,我出现了以下错误