| I've the following Entity
@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 = " ";
...
}
Also I've the following Spring JPA Repository:
public interface CodigoPostalRepository extends JpaRepository<CodigoPostal, Long> {
CodigoPostal findOneByCodigo(String codigo);
}
As you can see, there is a special character on the first column name 'º'. The problem is that, when I call to repo.findOneByCodigo() method, the following SQL is generated:
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`=?
The problem is that sql gives an error because of the name Hibernate assings to that column: as post_nº_2_2_. The generated SQL should be put inside `` the same way I've put the column name inside the @Column annotation Aditional Data: 2016-02-02 11:53:07.372 DEBUG 8185 — [ main] o.h.h.internal.ast.QueryTranslatorImpl : — HQL AST — -[QUERY] Node: 'query' +-[SELECT_FROM] Node: 'SELECT_FROM'
| +-[FROM] Node: 'from' |
| |
-[RANGE] Node: 'RANGE' |
| |
+-[DOT] Node: '.' |
| |
|
+-[DOT] Node: '.' |
| |
|
|
+-[DOT] Node: '.' |
| |
|
|
|
+-[IDENT] Node: 'com' |
| |
|
|
|
-[IDENT] Node: 'eunasa' |
| |
|
|
-[IDENT] Node: 'domain' |
| |
|
-[IDENT] Node: 'CodigoPostal' |
| |
-[ALIAS] Node: 'generatedAlias0' |
| -[SELECT] Node: 'select' |
-[IDENT] Node: 'generatedAlias0' -[WHERE] Node: 'where' -[EQ] Node: '=' +-[DOT] Node: '.' |
| +-[IDENT] Node: 'generatedAlias0' |
-[IDENT] Node: 'codigo' -[COLON] Node: ':' -[IDENT] Node: 'param0' |
2016-02-02 11:53:07.377 DEBUG 8185 — [ main] o.h.h.internal.ast.QueryTranslatorImpl : — SQL AST — -[SELECT] QueryNode: 'SELECT' querySpaces (cod__postales) +-[SELECT_CLAUSE] SelectClause: ' {select clause} '
+-[ALIAS_REF] IdentNode: 'codigopost0_.registro as registro1_2_' {alias=generatedAlias0, className=com.eunasa.domain.CodigoPostal, tableAlias=codigopost0_} | -[SQL_TOKEN] SqlFragment: '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] FromClause: 'from' FromClause{level=1, fromElementCounter=1, fromElements=1, fromElementByClassAlias=[generatedAlias0], fromElementByTableAlias=[codigopost0_], fromElementsByPath=[], collectionJoinFromElementsByPath=[], impliedElements=[]} | -[FROM_FRAGMENT] FromElement: 'cod_postales codigopost0' FromElement{explicit,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=generatedAlias0,role=null,tableName=cod_postales,tableAlias=codigopost0,origin=null,columns={,className=com.eunasa.domain.CodigoPostal}} -[WHERE] SqlNode: 'where' -[EQ] BinaryLogicOperatorNode: '=' +-[DOT] DotNode: 'codigopost0_.`post_nº_codigo`' {propertyName=codigo,dereferenceType=PRIMITIVE,getPropertyPath=codigo,path=generatedAlias0.codigo,tableAlias=codigopost0_,className=com.eunasa.domain.CodigoPostal,classAlias=generatedAlias0} | +-[ALIAS_REF] IdentNode: 'codigopost0_.registro' {alias=generatedAlias0, className=com.eunasa.domain.CodigoPostal, tableAlias=codigopost0_} |
| -[IDENT] IdentNode: 'codigo' {originalText=codigo} -[NAMED_PARAM] ParameterNode: '?' {name=param0, expectedType=org.hibernate.type.StringType@1e26bf02} |
|