Java 如何修复JPA/Hibernate错误,can';找不到表格信息?

Java 如何修复JPA/Hibernate错误,can';找不到表格信息?,java,spring,hibernate,spring-boot,Java,Spring,Hibernate,Spring Boot,我已经使用JPA/Hibernate将我的数据库连接到我的主Java应用程序。我可以通过Spring boot项目从Microsoft SQL表中添加/删除项。不过,当要查看表中的所有内容时,我会出错。我在下面附加了一些与该项目相关的代码 实体类: import javax.persistence.*; @Entity @Table(name = "taddm") public class AVSApplication { @Id @Column(name = "appco

我已经使用JPA/Hibernate将我的数据库连接到我的主Java应用程序。我可以通过Spring boot项目从Microsoft SQL表中添加/删除项。不过,当要查看表中的所有内容时,我会出错。我在下面附加了一些与该项目相关的代码

实体类:


import javax.persistence.*;

@Entity
@Table(name = "taddm")
public class AVSApplication {

    @Id
    @Column(name = "appcode")
    private String mAppCode;

    @Column(name = "acro")
    private String mAcronym;

    @Column(name = "appname")
    private String mAppName;


    //Constructor
    public AVSApplication(String mAppCode, String mAcronym, String mAppName) {
        super();
        this.mAppCode = mAppCode;
        this.mAcronym = mAcronym;
        this.mAppName = mAppName;
    }


    //Default Constructor
    public AVSApplication () {

    }


    //Getters
    public String getmAppCode() {
        return mAppCode;
    }

    public String getmAcronym() {
        return mAcronym;
    }
    public String getmAppName() {
        return mAppName;
    }



    //Setters
    public void setmAcronym(String mAcronym) {
        this.mAcronym = mAcronym;
    }
    public void setmAppCode(String mAppCode) {
        this.mAppCode = mAppCode;
    }

    public void setmAppName(String mAppName) {
        this.mAppName = mAppName;
    }




}

//Select
        @GetMapping("/select-me")
        public String selectApplication() {

            System.out.println(mAppRepo.findAll());
            System.out.println(mAppRepo.findById("3A0"));

           return "tier";
        }
Hibernate: select avsapplica0_.appcode as appcode1_0_, avsapplica0_.acro as acro2_0_, avsapplica0_.appname as appname3_0_ from taddm avsapplica0_
[]
Hibernate: select avsapplica0_.appcode as appcode1_0_0_, avsapplica0_.acro as acro2_0_0_, avsapplica0_.appname as appname3_0_0_ from taddm avsapplica0_ where avsapplica0_.appcode=?
Optional.empty
@Repository
public interface AppRepository extends JpaRepository<AVSApplication, String>{

     @Override
     List<AVSApplication> findAll();

}
appcode (primary key)
acro
appname
控制器:


import javax.persistence.*;

@Entity
@Table(name = "taddm")
public class AVSApplication {

    @Id
    @Column(name = "appcode")
    private String mAppCode;

    @Column(name = "acro")
    private String mAcronym;

    @Column(name = "appname")
    private String mAppName;


    //Constructor
    public AVSApplication(String mAppCode, String mAcronym, String mAppName) {
        super();
        this.mAppCode = mAppCode;
        this.mAcronym = mAcronym;
        this.mAppName = mAppName;
    }


    //Default Constructor
    public AVSApplication () {

    }


    //Getters
    public String getmAppCode() {
        return mAppCode;
    }

    public String getmAcronym() {
        return mAcronym;
    }
    public String getmAppName() {
        return mAppName;
    }



    //Setters
    public void setmAcronym(String mAcronym) {
        this.mAcronym = mAcronym;
    }
    public void setmAppCode(String mAppCode) {
        this.mAppCode = mAppCode;
    }

    public void setmAppName(String mAppName) {
        this.mAppName = mAppName;
    }




}

//Select
        @GetMapping("/select-me")
        public String selectApplication() {

            System.out.println(mAppRepo.findAll());
            System.out.println(mAppRepo.findById("3A0"));

           return "tier";
        }
Hibernate: select avsapplica0_.appcode as appcode1_0_, avsapplica0_.acro as acro2_0_, avsapplica0_.appname as appname3_0_ from taddm avsapplica0_
[]
Hibernate: select avsapplica0_.appcode as appcode1_0_0_, avsapplica0_.acro as acro2_0_0_, avsapplica0_.appname as appname3_0_0_ from taddm avsapplica0_ where avsapplica0_.appcode=?
Optional.empty
@Repository
public interface AppRepository extends JpaRepository<AVSApplication, String>{

     @Override
     List<AVSApplication> findAll();

}
appcode (primary key)
acro
appname
错误:


import javax.persistence.*;

@Entity
@Table(name = "taddm")
public class AVSApplication {

    @Id
    @Column(name = "appcode")
    private String mAppCode;

    @Column(name = "acro")
    private String mAcronym;

    @Column(name = "appname")
    private String mAppName;


    //Constructor
    public AVSApplication(String mAppCode, String mAcronym, String mAppName) {
        super();
        this.mAppCode = mAppCode;
        this.mAcronym = mAcronym;
        this.mAppName = mAppName;
    }


    //Default Constructor
    public AVSApplication () {

    }


    //Getters
    public String getmAppCode() {
        return mAppCode;
    }

    public String getmAcronym() {
        return mAcronym;
    }
    public String getmAppName() {
        return mAppName;
    }



    //Setters
    public void setmAcronym(String mAcronym) {
        this.mAcronym = mAcronym;
    }
    public void setmAppCode(String mAppCode) {
        this.mAppCode = mAppCode;
    }

    public void setmAppName(String mAppName) {
        this.mAppName = mAppName;
    }




}

//Select
        @GetMapping("/select-me")
        public String selectApplication() {

            System.out.println(mAppRepo.findAll());
            System.out.println(mAppRepo.findById("3A0"));

           return "tier";
        }
Hibernate: select avsapplica0_.appcode as appcode1_0_, avsapplica0_.acro as acro2_0_, avsapplica0_.appname as appname3_0_ from taddm avsapplica0_
[]
Hibernate: select avsapplica0_.appcode as appcode1_0_0_, avsapplica0_.acro as acro2_0_0_, avsapplica0_.appname as appname3_0_0_ from taddm avsapplica0_ where avsapplica0_.appcode=?
Optional.empty
@Repository
public interface AppRepository extends JpaRepository<AVSApplication, String>{

     @Override
     List<AVSApplication> findAll();

}
appcode (primary key)
acro
appname
回购:


import javax.persistence.*;

@Entity
@Table(name = "taddm")
public class AVSApplication {

    @Id
    @Column(name = "appcode")
    private String mAppCode;

    @Column(name = "acro")
    private String mAcronym;

    @Column(name = "appname")
    private String mAppName;


    //Constructor
    public AVSApplication(String mAppCode, String mAcronym, String mAppName) {
        super();
        this.mAppCode = mAppCode;
        this.mAcronym = mAcronym;
        this.mAppName = mAppName;
    }


    //Default Constructor
    public AVSApplication () {

    }


    //Getters
    public String getmAppCode() {
        return mAppCode;
    }

    public String getmAcronym() {
        return mAcronym;
    }
    public String getmAppName() {
        return mAppName;
    }



    //Setters
    public void setmAcronym(String mAcronym) {
        this.mAcronym = mAcronym;
    }
    public void setmAppCode(String mAppCode) {
        this.mAppCode = mAppCode;
    }

    public void setmAppName(String mAppName) {
        this.mAppName = mAppName;
    }




}

//Select
        @GetMapping("/select-me")
        public String selectApplication() {

            System.out.println(mAppRepo.findAll());
            System.out.println(mAppRepo.findById("3A0"));

           return "tier";
        }
Hibernate: select avsapplica0_.appcode as appcode1_0_, avsapplica0_.acro as acro2_0_, avsapplica0_.appname as appname3_0_ from taddm avsapplica0_
[]
Hibernate: select avsapplica0_.appcode as appcode1_0_0_, avsapplica0_.acro as acro2_0_0_, avsapplica0_.appname as appname3_0_0_ from taddm avsapplica0_ where avsapplica0_.appcode=?
Optional.empty
@Repository
public interface AppRepository extends JpaRepository<AVSApplication, String>{

     @Override
     List<AVSApplication> findAll();

}
appcode (primary key)
acro
appname

我想是的。这不是一个错误。实际上是一个有效的输出。您正在尝试查询(sysout)不存在的appcode-“3A0”。我尝试在我的本地服务器上复制相同的应用程序,通过查询不存在的应用程序代码,我可以做到这一点,如下所示:

无效输入:

System.out.println(mAppRepo.findAll());
System.out.println(mAppRepo.findById("appcode"));
System.out.println(mAppRepo.findAll());
    System.out.println(mAppRepo.findById("abc"));
输出:

[com.example.demo.entity.AVSApplication@1640ad08]
Optional.empty
[com.example.demo.entity.AVSApplication@335bed5b]
Optional[com.example.demo.entity.AVSApplication@655967a5]
有效输入:

System.out.println(mAppRepo.findAll());
System.out.println(mAppRepo.findById("appcode"));
System.out.println(mAppRepo.findAll());
    System.out.println(mAppRepo.findById("abc"));
输出:

[com.example.demo.entity.AVSApplication@1640ad08]
Optional.empty
[com.example.demo.entity.AVSApplication@335bed5b]
Optional[com.example.demo.entity.AVSApplication@655967a5]

因此,请确保您正在查询现有的有效条件。查找输入错误并重试。

您不需要在
JpaRepository
下覆盖
默认
findAll()
方法。只需将存储库界面保持为空即可

@Repository
public interface AppRepository extends JpaRepository<AVSApplication, String>{

}
@存储库
公共接口附件扩展了JPA附件{
}

如您所示,您的代码中似乎没有错误,它没有找到任何与
findById(“您的_键”)
的键有关的内容,并且您没有该键的值。 您可以做的是检查您是否具有该键的值,如下所示:

Optional<AVSApplication> optionalApp = mAppRepo.findById("3A0");
if (optionalApp.isPresent()) 
    {
        AVSApplication yourObject= optionalApp.get();
     } 
else 
    {
        //throw new exceptions or do whatever you want
    }
可选optionalApp=MapPrep.findById(“3A0”);
如果(可选的app.isPresent())
{
AVSApplication yourObject=optionalApp.get();
} 
其他的
{
//抛出新异常或执行任何您想要的操作
}

此外,从存储库中清除覆盖
findAll()
方法

在此处显示实体和存储库的完整代码。还有确切的表名是什么?@AjayKumar好的,我添加了存储库、实体和表名的代码。我在您的问题中的“错误”区域中没有看到错误。它只是表明Hibernate在数据库中没有找到任何东西(因此是空数组和可选的.empty)。你能发布实际错误的堆栈跟踪吗?谢谢你回复,但即使我使用
findAll()
方法,它仍然不起作用。因为它不需要参数,所以我将该方法用作测试。findAll()提供Iterable。看看这里-