Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.sql.SQLException:在sql查询不包含“max\u grade”的位置找不到“max\u grade”列_Java_Mysql - Fatal编程技术网

java.sql.SQLException:在sql查询不包含“max\u grade”的位置找不到“max\u grade”列

java.sql.SQLException:在sql查询不包含“max\u grade”的位置找不到“max\u grade”列,java,mysql,Java,Mysql,我的问题是我试图从3个表连接中获取值。我的mysql查询如下。它在sql控制台中正常工作,没有任何错误。但在使用Java运行时给出错误: StringBuilder queryString = new StringBuilder(); queryString.append("SELECT cs.id, MIN( s.grade_level_val ) as minGrade, MAX( s.grade_level_val ) as maxGrade FROM class_section cs "

我的问题是我试图从3个表连接中获取值。我的mysql查询如下。它在sql控制台中正常工作,没有任何错误。但在使用Java运行时给出错误:

StringBuilder queryString = new StringBuilder();
queryString.append("SELECT cs.id, MIN( s.grade_level_val ) as minGrade, MAX( s.grade_level_val ) as maxGrade FROM class_section cs ")
           .append("LEFT JOIN enrollment e ON e.class_section_id = cs.id ")
           .append("LEFT JOIN student s ON s.id = e.student_id ")
           .append("WHERE cs.id = :classSectionId");

TypedQuery<ClassSectionVO> query = (TypedQuery<ClassSectionVO>) entityManager.createNativeQuery(queryString.toString(), ClassSectionVO.class);
query.setParameter("classSectionId", classSectionId);

List<ClassSectionVO> result = query.getResultList();
查询中没有列max_grade,但其显示错误:

java.sql.SQLException :column 'max_grade' not found.
如果您使用的是JPA,那么在POJO中您可以使用类似camelCase的maxGrade,但JPA会将其转换为小写,并为数据库中的实际列添加下划线,这样maxGrade将对应于名为max_grade的DB列,因此实际查询将在数据库中查找max_grade,而不是maxGrade。这是惯例,您可以覆盖它,但如果您在代码中连接单词和camelCase,则最好将数据库列设置为小写加下划线。

如果您的对象设置了,则camelCase名称将转换为snake\u case


如果您不想使用snake_case,那么请不要设置命名策略,或者将其设置为。

在经过数小时的搜索后,我保存了以下内容:
spring.jpa.hibernate.naming.physical strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

jpa中使用的查询语言与MySQL中使用的不同。你需要重写你的查询。你能给我举个例子吗that@RogerGustavsson在这里编写本机查询时不会这样做。@Uwealner-Oops。我的错。但是一些JPA/JPQL的东西似乎已经悄悄通过了。将maxGrade更改为max_grade。可以查看和。或者,在这种情况下,minGrade和maxGrade应该放在后面的刻度中?因为它们是别名。他们会不会被JPA触动,或者无论如何都会发生这种情况?@RogerGustavsson:我认为这是另一种情况,实体经理希望在结果集中出现snake_案例,但正在查找camelCase,因此表面上更改查询以确保camelCase结果(当它们已经存在时)不会取得任何效果。当然,如果需要的话,可以将查询更改为使用snake_case。@eggyyal:也许我仍然缺少一些东西,但maxGrade用于命名结果列。查询从不尝试从列maxGrade或max_grade读取数据,那么为什么要将maxGrade转换为max_grade呢?错误消息表明它已被删除。@RogerGustavsson:该实体是用@Columnname=maxGrade声明的,这将改进NamingStrategy转换为max_grade。结果集不包含名为max_grade的列,因此实体管理器抱怨找不到“max_grade”列。请参阅。我知道我错过了什么。我现在要安静了。 java.sql.SQLException :column 'max_grade' not found.