我正在使用休眠从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;
...
当我查询StopDTO(使用NamedNativeQuery)时,出现了以下消息:
由以下原因引起:org.hibernate.tool.schema.spi.SchemaManagementException:
架构验证:在列[PosX]中遇到错误的列类型
表[Nodos];找到了[coordenada(Types#REAL)],但期望[浮动
(Types#FLOAT)]在
org.hibernate.tool.schema.internal.SchemaValidatorImpl.validateColumnType(SchemaValidatorImpl.java:165)
在
org.hibernate.tool.schema.internal.SchemaValidatorImpl.validateTable(SchemaValidatorImpl.java:150)
在
org.hibernate.tool.schema.internal.SchemaValidatorImpl.performValidation(SchemaValidatorImpl.java:95)
在
org.hibernate.tool.schema.internal.SchemaValidatorImpl.doValidation(SchemaValidatorImpl.java:62)
...
通过为Coordenada和TipoNodo实现几个UserTypes是否可以解决此问题?如果不是,该怎么办?
谢谢!
最佳答案
请检查在Hibernate中配置的方言,它应该是SQLServer2008Dialect。