如何修复 JPA/Hibernate 错误,找不到表信息?

我已使用 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


BIG阳
浏览 123回答 3
3回答

噜噜哒

您不需要使用override默认findAll()方法JpaRepository。只需将存储库界面保持为空即可。@Repositorypublic interface AppRepository extends JpaRepository<AVSApplication, String>{}

守着一只汪

正如您所显示的,您的代码中似乎没有错误,它没有找到带有该键的任何内容,findById("your_key")并且您没有该键的值。你可以做的是检查你是否有该键的值,如下所示并采取相应的行动:Optional<AVSApplication> optionalApp = mAppRepo.findById("3A0");if (optionalApp.isPresent())&nbsp;&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; AVSApplication yourObject= optionalApp.get();&nbsp; &nbsp; &nbsp;}&nbsp;else&nbsp;&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; //throw new exceptions or do whatever you want&nbsp; &nbsp; }findAll()此外,从存储库中清除您的覆盖方法

波斯汪

我是这么想的。这不是一个错误。事实上,这是一个有效的输出。您正在尝试查询(sysout)应用程序代码 - “3A0”,但该代码不存在。我尝试在本地复制相同的内容,并且可以通过查询不存在的应用程序代码来完成此操作,如下所示:输入无效:System.out.println(mAppRepo.findAll());System.out.println(mAppRepo.findById("appcode"));输出:[com.example.demo.entity.AVSApplication@1640ad08]Optional.empty有效输入:System.out.println(mAppRepo.findAll());&nbsp; &nbsp; System.out.println(mAppRepo.findById("abc"));输出:[com.example.demo.entity.AVSApplication@335bed5b]Optional[com.example.demo.entity.AVSApplication@655967a5]因此,请确保您正在查询现有且有效的条件。查找拼写错误并重试。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java