如何创建自定义方言并将其添加到Grails 3中的application.yml文件?

时间:2017-10-18 19:24:55

标签: mysql hibernate grails

我正在使用 Grails 3 和Spring Security Rest插件创建REST API 我使用 MySQL 作为我的后端 但是每当我尝试向/ api / login端点发送请求时,我总是会收到401错误 因此,我假设我的Domain类的布尔属性未在MySQL数据库中正确映射。因此,Spring Security正在抛出401错误 简而言之,我想创建以下自定义方言

package com.yourcompany.yourapp

import java.sql.Types
import org.hibernate.dialect.MySQL5InnoDBDialect

class MyDialect extends MySQL5InnoDBDialect {
   public MyDialect() {
      registerColumnType(Types.BIT, "boolean")
   }
}  

但我很困惑如何做到这一点。我应该创建一个新的Java文件还是Groovy文件?我应该在grails app目录中的哪个目录中创建自定义方言?

此外,我需要知道我应该在 application.yml 文件中进行哪些更改,以便使用我的自定义方言。

非常感谢任何形式的帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

package my.package

import org.hibernate.dialect.MySQL5InnoDBDialect

class ImprovedMySQLDialect extends MySQL5InnoDBDialect {
    @Override
    public String getDropSequenceString(String sequenceName) {
        // Adding the "if exists" clause to avoid warnings
        return "drop sequence if exists " + sequenceName;
    }

    @Override
    public boolean dropConstraints() {
        // We don't need to drop constraints before dropping tables, that just leads to error
        // messages about missing tables when we don't have a schema in the database
        return false;
    }
}

并在您的application.yml

dataSources:
    dataSource:
        #logSql: true
        #formatSql: true
        pooled: true
        jmxExport: true
        driverClassName: com.mysql.jdbc.Driver
        #dialect: org.hibernate.dialect.MySQL5InnoDBDialect
        dialect: my.package.ImprovedMySQLDialect

通常,您会将您的ImprovedDialect文件放在src/main/groovy/my/package/ImprovedMySQLDialect.groovy内的grails 2中src/mainsrc/groovy

的路径类似

您将成为数据库模型的域类或对象置于其中 - >的grails-app /结构域

所有助手类都在src / main(java groovy)

你的意思是那些盒子里面有0101垃圾吗?我不认为它会给你X / Y或A勾选框或数字值0/1它会给你Boolean

或者将您的布尔值声明为Bytebyte

byte privacy 
boolean main=false

  static mapping = {
        cache true
        privacy(sqlType: 'tinyint(2)')
        main(sqlType: 'bit(1)'
  }

是您尝试做的一些替代方案......

有效的字节或布尔值可以是3个状态null或false或true,你可以用布尔声明打开或关闭的3种方式来处理它。