Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server grailsdbcreate=&x27;验证';无法识别现有表_Sql Server_Grails_Datasource_Gorm - Fatal编程技术网

Sql server grailsdbcreate=&x27;验证';无法识别现有表

Sql server grailsdbcreate=&x27;验证';无法识别现有表,sql-server,grails,datasource,gorm,Sql Server,Grails,Datasource,Gorm,我的数据源配置如下: development { dataSource { dbCreate = "validate" url = "jdbc:sqlserver://myservername" } } 我的SQL Server“myservername”有一个数据库“products”,其中一个表“inventory”由“dbo”拥有。以下是我的库存类映射: static mapping = { table 'products.dbo.

我的数据源配置如下:

development {
    dataSource {
        dbCreate = "validate"
        url = "jdbc:sqlserver://myservername"
    }
}
我的SQL Server“myservername”有一个数据库“products”,其中一个表“inventory”由“dbo”拥有。以下是我的库存类映射:

static mapping = {
    table 'products.dbo.inventory'
    version false
    columns {
        id column: 'itemKey'
        itemId column: 'itemId'
        inactive column: 'inactive'
    }
}
当我尝试运行应用程序时,出现以下错误:

嵌套异常为org.hibernate.HibernateException:缺少表:products.dbo.inventory

另外,当我将dbCreate从“validate”更改为“update”或任何其他选项时,它工作正常。

你知道为什么吗

提前感谢,
臭鼬

编辑以回答问题-

我合并了对对象的更改,但仍然得到错误。这是我的目标:

class Inventory {

Integer id
String itemId
String description
Boolean inactive

static mapping = {
    table 'products.dbo.inventory'
    version false
    columns {
        id column: 'itemKey'
        itemId column: 'itemId'
        description column: 'description'
        inactive column: 'inactive'
    }
}

static constraints = {
    itemId (maxSize: 30)
    description (maxSize: 100)
}

static hasMany = [productInventoryDefaults: ProductInventoryDefaults, productTreeNodes: ProductTreeNodes]

String toString() {
    return this.itemId
}

}
和表:

CREATE TABLE [dbo].[inventory](
[itemKey] [int] NOT NULL,
[itemId] [varchar](30) NOT NULL,
[description] [varchar](100) NOT NULL,
[inactive] [bit] NOT NULL,
 CONSTRAINT [PK_Inventory] PRIMARY KEY CLUSTERED 
(
[itemKey] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

我相信Hibernate在这里没有办法看到如何生成主键

我会尝试:

  • id
    字段改为
    IDENTITY
  • 或/和调整以使用Java端
    生成器
  • 或者,更简单的方法是,尝试使用
    dbCreate=“create”
    和适当的权限连接到测试数据库,查看Hibernate将创建什么表结构,并将您的表更改为该表

如果需要保持表结构的完整性,那么只有第二种方法是正确的。

Grails实际上没有改变表中的任何内容,可能是字段类型吗?域对象和表结构是什么?您是说,如果在“更新”模式下,Grails尝试更改某些内容(即使它失败,因为它没有对db的DDL权限),那么它将无法在“验证”模式下识别表的存在吗?因为对象和数据库表之间的列类型存在一些差异。@VictorSergienko,我已经在我的原始文章中包含了我的对象和表。这并不是说它试图改变它,但是
“validate”
意味着Hibernate将验证tabe是否完全符合Hibernate关于表的“想法”:DMerci Beaucup!我会尽量让你知道我的想法。