我在stackoverflow和其他资源上看到了太多此类问题,但是这些解决方案并没有帮助我:(我的一个类,将MSSQL-DB中的表转换为enttie。
@Id
@Column(name = "[primary_key]")
private int id;
@Column(name = "[id Employee]")
private byte[] employeeId;
@Column(name = "[Period]")
private Date period;
@Column(name = "[Credit amount]")
private float creditAmount;
@Column(name = "[Type]")
private String type;
@Column(name = "[Weight 585]")
private float weight585;
和CrudRepo为此(部分):
@Query(value = "select sum([Weight 585]) from [ZOK per period] where ([Period] between ?1 and ?2) " +
"and ([id Employee] = ?3) and ([Type] = 'Gold')", nativeQuery = true)
Double getSumZokGold(Date start, Date end, byte[] employeeId);
我所有的列名都是红色的,并带有下划线并带有两个错误:
无法解析“”列; 未知的数据库功能''; 我检查了持久性和已分配的数据-它是该问题的最流行解决方案。我已经检查了方言-MS SQL Server。我检查了所有列名,没有发现任何错误。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
遇到这种情况,通常是因为实体类中的列名注解与数据库实际列名不匹配,或者存在特殊字符导致Hibernate无法正确解析。在你的例子中,列名包含空格和特殊字符,这可能是问题的根源。
针对你的情况,可以尝试以下几种解决方法:
使用反引号包裹列名:如果数据库方言支持(如MySQL),可以使用反引号(`)包裹列名以允许使用特殊字符或保留字。但请注意,SQL Server并不推荐这种方式,它更倾向于使用方括号([])来包围标识符。
更改列名注解为方括号包围:确保实体类中的@Column注解与数据库中的列名格式完全一致。由于你使用的是SQL Server,应该使用方括号包围列名,确保这些方括号在注解中也被正确转义。例如:
@Column(name = "[primary_key]")
@Column(name = "[id Employee]")
@Column(name = "[Period]")
@Column(name = "[Credit amount]")
@Column(name = "[Type]")
@Column(name = "[Weight 585]")
@Query(value = "SELECT SUM([Weight 585]) FROM [ZOK per period] WHERE ([Period] BETWEEN ?1 AND ?2) "
"AND ([id Employee] = ?3) AND ([Type] = 'Gold')", nativeQuery = true)
数据库方言设置:确认你的Spring Data JPA配置中已经正确设置了数据库方言为org.hibernate.dialect.SQLServerDialect
或针对你使用的SQL Server版本的特定方言。
清理与重建项目:有时候IDE可能没有正确识别到最新的更改,尝试清理项目(比如Eclipse的Project -> Clean...,或者IntelliJ IDEA的Build -> Clean Project)然后重新构建。
如果以上步骤都确认无误,但问题依旧存在,可能需要检查项目的依赖是否有冲突,或者考虑是否存在IDE层面的配置问题。有时候重启IDE也能解决一些莫名其妙的问题。