目前,我在为我的springboot项目获取mysql数据时遇到了一个问题:
出现错误(类型=内部服务器错误,状态=500)。无法提取结果集; SQL [不适用];嵌套异常为组织休眠异常。SQLGrammarException:无法提取结果集
测试实体.java
@Entity
public class TestEntity implements Serializable {
@Id
private int id;
private String p1;
private String p2;
private String p3;
public TestEntity() {
}
public TestEntity(int id, String p1, String p2, String p3){
this.id = id;
this.p1 = p1;
this.p2 = p2;
this.p3 = p3;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getP1() {
return p1;
}
public void setP1(String p1) {
this.p1 = p1;
}
public String getP2() {
return p2;
}
public void setP2(String p2) {
this.p2 = p2;
}
public String getP3() {
return p3;
}
public void setP3(String p3) {
this.p3 = p3;
}
}
测试服务.java
@Service
public class TestService {
@Autowired
private TestRepository testRepository;
public ArrayList<TestEntity> getAllTestEntities(){
ArrayList<TestEntity> list = new ArrayList();
testRepository.findAll().forEach(list::add);
return list;
}
public Optional getTestEntity(int id){
return testRepository.findById(id);
}
public void addTestEntity(TestEntity t){
testRepository.save(t);
}
public void removeTestEntity(int index){
testRepository.deleteById(index);
}
}
测试存储库.java
@Repository("mysql")
public interface TestRepository extends CrudRepository<TestEntity,Integer> {
}
测试控制器.java
@RestController
public class TestController {
@Autowired
private TestService testService;
@RequestMapping("/test/AllUnits")
public ArrayList<TestEntity> getAllTestUnits(){
return testService.getAllTestEntities();
}
@RequestMapping("/test/{id}")
public Optional getAllTestUnit(@PathVariable int id){
return testService.getTestEntity(id);
}
@RequestMapping(method=RequestMethod.POST,value = "/test" )
public void addTestUnit(@RequestBody TestEntity t){
testService.addTestEntity(t);
}
@RequestMapping(method=RequestMethod.DELETE,value = "/test/{id}" )
public void deleteTestUnit(@RequestBody Integer id){
testService.removeTestEntity(id);
}
@RequestMapping("/test/welcome")
public String welcome(){
return "welcome to springboot";
}
}
编辑:应用程序属性
cloud.aws.region.auto=true
cloud.aws.region.static=us-east-2
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://alyxdev.czcdgqfkwsnr.us-east-2.rds.amazonaws.com:3306/CryptoCurrency
spring.datasource.username=*******
spring.datasource.password=*******
我能够使/test/welcomeMap工作,因此我相信我的服务和控制器的实现是正确的。所以我想知道我是否在访问存储库中的数据库时犯了错误,或者我应该使用JpaRepository而不是CrudRepository并使用显式查询?
编辑堆栈跟踪:数据访问无效资源使用异常:无法提取结果集; SQL [不适用];嵌套异常为组织休眠异常。SQLGrammarException:无法提取结果集,原因是:org.hibernate.exception.SQLGrammarException:无法提取结果集,原因是:发生语法错误异常:表'加密货币.test_entity'不存在
4条答案
按热度按时间tkqqtvp11#
在Entity类(即www.example.com)中TestEntity.java,需要指定所引用的表
而且使用CrudRepository可以很好地处理数据库,application.properties文件看起来不错。
eqzww0vc2#
我找到了问题的解决方案,显然是通过在SQL中将表重命名为所有小写字符(
test_table
),然后使用该表而不是Test_table
,Springboot能够找到该表并将其链接Map到我的实体类。我不知道为什么它会这样工作。也许与我正在使用的Netbeans IDE有关?qzwqbdag3#
如果用@Table(name =“EmplyeeSalary”)注解实体类,那么JPA会生成employee_salary作为表名,根据名称中每个大写字母的命名约定,将生成一个全部小写的新词,并使用_将其与之前的词分隔开。
如果您像@Table(name =“AbcDefGhi”)那样注解实体类,那么JPA将查找abc_def_ghi表。
zzwlnbp84#
在我的例子中,这是由于一列没有添加到表中,但在我的实体类中,我期待