Java 如何修复JPA/Hibernate错误,can';找不到表格信息?
我已经使用JPA/Hibernate将我的数据库连接到我的主Java应用程序。我可以通过Spring boot项目从Microsoft SQL表中添加/删除项。不过,当要查看表中的所有内容时,我会出错。我在下面附加了一些与该项目相关的代码 实体类: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
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。看看这里-