我正在使用 hibernate 从 SQL Server 2014 数据库获取一些数据。
有一个表,其中包含用户定义的数据类型的列:
dbo.Nodos
Id (PK, int, not null)
Tipo (PK, FK, TipoNodo(tinyint), not null)
Nombre (varchar(40), null)
PosX (Coordenada(real), not null)
PosY (Coordenada(real), not null)
Label (varchar(8), not null)
这些数据类型是 Coordenada 和 TipoNodo:
User-Defined Data Types
dbo.Coordenada (real, not null)
dbo.TipoNodo (tinyint, not null)
我将 Nodos 表映射为 Java 中的 StopDTO 类:
@Entity
@Table(name = "Nodos")
public class StopDTO {
/*
* Atributos
*/
@Id
@Column(name = "Id", insertable = false, updatable = false)
private Integer id;
@Column(name = "Tipo", insertable = false, updatable = false)
private Integer tipo;
@Column(name = "Nombre", insertable = false, updatable = false)
private String nombre;
@Column(name = "PosX", insertable = false, updatable = false)
private Float posx;
@Column(name = "PosY", insertable = false, updatable = false)
private Float posy;
@Column(name = "Label", insertable = false, updatable = false)
private String label;
...
当我查询 StopDTOs(使用 NamedNativeQuery)时出现问题,我收到以下消息:
Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [PosX] in table [Nodos]; found [coordenada (Types#REAL)], but expecting [float (Types#FLOAT)] at org.hibernate.tool.schema.internal.SchemaValidatorImpl.validateColumnType(SchemaValidatorImpl.java:165) at org.hibernate.tool.schema.internal.SchemaValidatorImpl.validateTable(SchemaValidatorImpl.java:150) at org.hibernate.tool.schema.internal.SchemaValidatorImpl.performValidation(SchemaValidatorImpl.java:95) at org.hibernate.tool.schema.internal.SchemaValidatorImpl.doValidation(SchemaValidatorImpl.java:62) ...
这个问题可以通过为 Coordenada 和 TipoNodo 实现几个 UserType 来解决吗?如果不是我该怎么办?
谢谢!
最佳答案
请检查Hibernate中配置的方言,应该是SQLServer2008Dialect。
关于java - 用户定义的数据类型遇到错误的列类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39527033/