【发布时间】:2016-02-02 09:01:41
【问题描述】:
我正在使用 Spring JPA 存储库和下面的 Hibernate 来访问 MySQL 数据库。在那个环境中,我有以下实体:
@Entity
@Table(name="cod__postales")
public class CodigoPostal {
@Id
@GeneratedValue
private Long registro;
@Column(name = "`POST_Nº_CODIGO`", length = 6, nullable = false)
private String codigo = " ";
@Column(name = "POST_DESCRIP", length = 30, nullable = false)
private String descripcion = " ";
@Column(name = "POST_ZONA_ASIG", length = 2, nullable = false)
private String zona = " ";
我还有以下 Spring JPA 存储库:
public interface CodigoPostalRepository extends JpaRepository<CodigoPostal, Long> {
CodigoPostal findOneByCodigo(String codigo);
}
如您所见,第一列名称“º”上有一个特殊字符。问题在于,当我调用 repo.findOneByCodigo() 方法时,会生成以下 SQL
select codigopost0_.registro as registro1_2_,
codigopost0_.`post_nº_codigo` as post_nº_2_2_,
codigopost0_.post_descrip as post_des3_2_,
codigopost0_.post_zona_asig as post_zon4_2_
from cod__postales codigopost0_
where codigopost0_.`post_nº_codigo`=?
问题是由于名称 spring/hibernate assing 到该列,sql 给出了错误:as post_nº_2_2_。
我怎样才能避免这种情况?
【问题讨论】:
-
并没有真正帮助您(除非您愿意更改您的 JPA 提供程序),但我使用的实现(DataNucleus)在 select 子句中使用非标准字符的那种查询上运行良好(它不会将这些不必要的别名放在其生成的 SQL 中)