我正在尝试在一个项目中创建2个(不相关的)实体。我正在使用Java springboot连接到mysql数据库。那我能做的最好的方法是什么?因为我试图建立2个存储库,但我仅成功了其中1个。另一个给我一个错误。它给了我错误,即使当我在mysql工作台上运行查询时也没问题
在无法使用的存储库(AccountRepository.java)中,我输入了以下内容:
public interface AccountRepository extends CrudRepository<Accounts, Integer> {
@Query("SELECT applicationPassword FROM Accounts where applicationName = 'myApp'")
String findPasswordApp();
}
在实体文件(Accounts.java)中,我放置了类似的内容
@Entity
public class Accounts {
@Id
private Integer accountID;
private String applicationName;
private String applicationPassword;
public void setAccountID(Integer accountID) {
this.accountID = accountID;
}
public void setApplicationName(String applicationName) {
this.applicationName = applicationName;
}
public void setApplicationPassword(String applicationPassword) {
this.applicationPassword = applicationPassword;
}
public Integer getAccountID() {
return accountID;
}
public String getApplicationName() {
return applicationName;
}
public String getApplicationPassword() {
return applicationPassword;
}
}
但这给了我错误。我从这个实体想要的是我可以检查数据库中我已经手动将其放在mysql工作台中的值(读取)。
这是我首先在mysl工作台中执行的表查询
CREATE TABLE Accounts (
accountID int,
applicationName varchar(255),
applicationPassword varchar(255)
);
这也是我成功将数据插入其中的时候:
INSERT INTO Accounts (accountID, applicationName, applicationPassword)
VALUES ('1', 'myApp', 'password'));
我的代码有什么问题吗?请帮助
编辑:我尝试用这行掩盖'String password = accountRepository.findPasswordApp(); ”,这给了我类似“ java.lang.NullPointerException”的异常
这是我的全部例外: 在org.eclipse.paho.client.mqttv3.internal.CommsCallback.deliverMessage(CommsCallback.java:499) 在org.eclipse.paho.client.mqttv3.internal.CommsCallback.handleMessage(CommsCallback.java:402) 在org.eclipse.paho.client.mqttv3.internal.CommsCallback.run(CommsCallback.java:206) 在java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511) 在java.util.concurrent.FutureTask.run(FutureTask.java:266) 在java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 201(ScheduledThreadPoolExecutor.java:180) 在java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624) 在java.lang.Thread.run(Thread.java:748) '
答案 0 :(得分:0)
我很确定您的存储库缺少注释或不在扫描的软件包中。我有10个存储库的项目,所以绝对不是问题,@ Query批注中的HQL似乎还可以。
没有理由说这2个不能一起工作,所以我猜你的@Autowired字段在运行时抛出错误的回购代码为null。您可能只忘记了一个注释。在AccountRepository顶部是否没有@Repository批注?您的主类或配置中的@ComponentScan是否没有包含它的软件包?
如果缺少任何这些东西,那是您的问题。您可以使用例外全文对其进行编辑吗?