为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

BIG阳 2023-09-13 18:06:32
我已使用 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回购协议:@Repositorypublic interface AppRepository extends JpaRepository<AVSApplication, String>{     @Override     List<AVSApplication> findAll();}表名称:appcode (primary key)acroappname
查看完整描述

3 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

您不需要使用override默认findAll()方法JpaRepository。只需将存储库界面保持为空即可。


@Repository

public interface AppRepository extends JpaRepository<AVSApplication, String>{


}


查看完整回答
反对 回复 2023-09-13
?
守着一只汪

TA贡献1872条经验 获得超3个赞

正如您所显示的,您的代码中似乎没有错误,它没有找到带有该键的任何内容,findById("your_key")并且您没有该键的值。你可以做的是检查你是否有该键的值,如下所示并采取相应的行动:


Optional<AVSApplication> optionalApp = mAppRepo.findById("3A0");

if (optionalApp.isPresent()) 

    {

        AVSApplication yourObject= optionalApp.get();

     } 

else 

    {

        //throw new exceptions or do whatever you want

    }

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


查看完整回答
反对 回复 2023-09-13
?
波斯汪

TA贡献1811条经验 获得超4个赞

我是这么想的。这不是一个错误。事实上,这是一个有效的输出。您正在尝试查询(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());

    System.out.println(mAppRepo.findById("abc"));

输出:


[com.example.demo.entity.AVSApplication@335bed5b]

Optional[com.example.demo.entity.AVSApplication@655967a5]

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


查看完整回答
反对 回复 2023-09-13
  • 3 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信