休眠:模式验证:缺少表

时间:2018-08-14 07:22:44

标签: sql sql-server hibernate

我尝试从MSSQL Server 2016数据库中的现有表中读取。如果我验证(hbm2ddl.auto->验证),则会收到异常“架构验证:缺少表”。

我比较了生成的Hibernate SQL代码(如果我从验证切换到使用我可以在MSSQL Server本身中生成的SQL代码进行更新。它看起来是相等的:

-- generated SQL from Hibernate 
create table Artikel (
       Artnr int not null,
        Artgruppe CHAR(5),
        Bezeichnung VARCHAR(30) not null,
        EPreis money,
        primary key (Artnr)
    )

-- generated SQL from MSSQL Server 2016
CREATE TABLE [dbo].[Artikel](
    [Artnr] [int] NOT NULL,
    [Bezeichnung] [varchar](30) NOT NULL,
    [EPreis] [money] NULL,
    [Artgruppe] [char](5) NULL,
PRIMARY KEY CLUSTERED 
(
    [Artnr] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

Java模型是:

@Entity
@Table(name = "Artikel")
public class Article {
    @Id
    @Column(name = "Artnr", nullable=true)
    private int article_id;

    @Column(name = "Bezeichnung", columnDefinition="VARCHAR(30)", nullable=false)
    private String description;


    @Column(name = "EPreis", columnDefinition = "money", nullable=true)
    private BigDecimal price;

    @Column(name = "Artgruppe", columnDefinition="CHAR(5)")
    private String article_group;


    // getters and setters
    // ... not shown here
}

那是什么问题?也许与货币类型有关?

感谢和问候

4 个答案:

答案 0 :(得分:3)

此处有2个问题:表/列名称的大小写敏感性命名策略

请注意错误消息中的表名,并注意大小写字母。遇到此问题时,我的假设是表名不区分大小写。至少当我编写sql查询时就是这种情况(我当时使用的是MSSQL)。但显然,JPA确实关心大小写。

关于命名策略,如果您未指定任何策略,则JPA会将具有一些大写字母(例如User_Detail)的表名,列名转换为所有用小写和下划线分隔的名称(即{ {1}})。如果要在批注中提供表名和列名,并且不希望JPA转换它们,则将这两行添加到dbo.user_detail中:

application.properties

答案 1 :(得分:2)

最后,我解决了这个问题。我替换了

@Table(name = "Artikel")
public class Article {

反对

@Table(name = "Artikel", schema="dbo")
public class Article {

但是dbo是用户的默认架构,因此在没有schema =“ dbo”的情况下应该可以使用。也许这是某种错误?我有人有更多信息,请让我知道...

答案 2 :(得分:0)

我将其添加到属性中,并且可以正常工作:

spring.jpa.properties.hibernate.default_schema=dbo

答案 3 :(得分:0)

如果建议使用 SQLServer 将用户映射到 dedault 数据库以避免架构出现问题,请检查:

https://stackoverflow.com/a/65601637/7159247