我已经使用JPA / Hibernate将数据库连接到我的主要Java应用程序。我可以通过Spring启动项目从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
答案 0 :(得分:0)
我是这样认为的。它不是错误。实际上是有效的输出。您正在尝试查询(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]
因此,请确保您要查询现有的有效条件。寻找拼写错误,然后重试。
答案 1 :(得分:0)
您不需要override
下的findAll()
默认JpaRepository
方法。只需将存储库接口保留为空即可。
@Repository
public interface AppRepository extends JpaRepository<AVSApplication, String>{
}
答案 2 :(得分:0)
如您所显示,似乎代码中没有错误,它没有发现任何带有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()
方法