我正在使用休眠从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。

10-04 20:33