当前位置: 首页 > wzjs >正文

网站建设 永灿 竞争昆明软件公司有哪些

网站建设 永灿 竞争,昆明软件公司有哪些,自己做网站和凡科的区别,在哪里可以看免费的视频前言 最近在做达梦数据库集成 JPA 时,发现使用的表注解和字段注解均未生效(MySQL、Oracle、PostgreSQL中均可以在建表时正常生成相应的注释),经过调试发现解决办法也很简单: 自定义方言类继承自org.hibernate.dialect…

前言

最近在做达梦数据库集成 JPA 时,发现使用的表注解和字段注解均未生效(MySQL、Oracle、PostgreSQL中均可以在建表时正常生成相应的注释),经过调试发现解决办法也很简单:

  1. 自定义方言类继承自org.hibernate.dialect.DmDialect,重写supportsCommentOn方法返回 true:

    /*** 自定义 dm 方言类** @author butterfly* @date 2024-03-11*/
    public class MyDmDialect extends DmDialect {@Overridepublic boolean supportsCommentOn() {return true;}}
    
  2. yaml 配置中使用自定义的方言类:

    spring:jpa:# 根据自己的类路径进行修改database-platform: cn.butterfly.config.MyDmDialect
    

如果大家也在使用达梦集成 JPA 时遇到了以上问题,按照上述说明配置即可。下面再说明一下我的解决思路以及后续如果集成其它数据库出现类似问题改如何解决。

产生背景

首先我们要知道的是 JPA 之所以能够帮助我们屏蔽不同 SQL 语言的差异,帮助我们自动建表,生成增删改查语句等等,其实都是内部帮助我们做了数据库类型的判断,然后生成或拼接相应的 SQL 语句。所以对于已经广泛使用的数据库,例如 MySQL、Oracle、PostgreSQL 等均能比较好地适配 JPA 的语法和提供的注解功能,而像达梦是近几年由于信创才开始在国内兴起,因此难免会有一些不兼容的情况,这也是本文出现的根本原因。

解决思路

正如标题所说,达梦是在自动建表时不支持 JPA 的表和字段注释注解,因此我们就需要找到负责拼接建表语句的org.hibernate.tool.schema.internal.StandardTableExporter类(类似地,如果建索引有问题就可以看org.hibernate.tool.schema.internal.StandardIndexExporter类),然后经过查找就可以发现如下负责拼接注释的代码:

image-20240311160054824

image-20240311155900650

这里可以看到第一张图是用于拼接列注释,第二张图的第一处红框用于拼接表注释,而第二张图的第二处调用的方法又进行了一次表和字段注释的拼接,这是什么原因呢?其实就是不同数据库的注释拼接方式不同而已,像 Mysql 的列注释直接拼接在字段说明后即可,表注释也是跟随建表语句一起,类似下图:

image-20240311160520593

而像 Oracle、达梦之类的数据库则是使用了comment on的语法形式,如下图所示:

image-20240311164106789

因此上述代码中有两种处理注释拼接的方式,同时也可以发现第一种拼接方式获取列注释和表注释时分别调用了dialect.getColumnComment( columnComment ) dialect.getTableComment( table.getComment() ) 方法,而第二种拼接方式则是调用了dialect.supportsCommentOn() 先进行判断,然后再处理注释的拼接。

这里的dialect即是方言对象:

image-20240311161141858

该类中包含以上三个方法,返回值不是 false 就是空字符串也就是不添加注释:

image-20240311162320023

不过在运行时会 JPA 会自动注入我们在 yaml 文件中的配置:

image-20240311161242178

但是到这里我们只是知道了注释的拼接方式,还不清楚为什么达梦数据库会出现失效的情况,那我们就先看一下 MySQL 和 Oracle 等数据库为什么能生效,首先是 MySQL(org.hibernate.dialect.MySQLDialect):

image-20240311161736307

可以发现 MySQL 内部重写了获取表和字段注释的方法,没有重写supportsCommentOn方法,而该方法默认返回 false,因此 MySQL 会使用第一种创建注释的方式,下面再看看 Oracle 的处理:

image-20240311162531332

可以看到 Oracle 只重写了supportsCommentOn方法并返回 true,也就是上面讲到的第二种拼接方式,而我们知道达梦和 Oracle 一样使用这种创建注释的方法,到这里相信大家也可以知道达梦无法创建表和字段注释的原因了,不过我们还是先看一下达梦的源码:

image-20240311162856009

可以发现达梦比较直接,直接把Dialect类中的代码原样不动搬过来了,还没有重载注解(懂得都懂,CV 大法🙂),因此我们只需要重写一个方言类继承自该类,然后使用即可,前言中已经说明,不再重述。

运行测试

在改完后,我们先再运行测试一下再结束本篇文章。首先我们创建一个实体类(这里的 IdEntity 就是包含 id 字段的类):

/*** Demo** @author butterfly* @date 2024-03-11*/
@Data
@Entity
@Table(name = "demo")
@EqualsAndHashCode(callSuper = true)
@org.hibernate.annotations.Table(appliesTo = "demo", comment = "演示表")
public class Demo extends IdEntity {/*** 字段*/@Column(length = 50, nullable = false)@Comment("字段")private String field;}

然后运行项目,Pass!

image-20240311163730319


文章转载自:

http://Vje8s9jM.yhwmg.cn
http://I8DAdiUN.yhwmg.cn
http://2xWQHw4y.yhwmg.cn
http://TvSr5Yhw.yhwmg.cn
http://athcrRmW.yhwmg.cn
http://cHKdtQnd.yhwmg.cn
http://n4da9ApC.yhwmg.cn
http://NvTW5eEJ.yhwmg.cn
http://4RO66nUb.yhwmg.cn
http://oKm4y62I.yhwmg.cn
http://PqwAa92j.yhwmg.cn
http://3mdFKvH7.yhwmg.cn
http://W7h7JKJo.yhwmg.cn
http://yICLEpMd.yhwmg.cn
http://O9bMtiAt.yhwmg.cn
http://HgxMWc0q.yhwmg.cn
http://xarCovzQ.yhwmg.cn
http://2SMXcDpw.yhwmg.cn
http://FwT2d2oW.yhwmg.cn
http://2CdQmWiu.yhwmg.cn
http://HGJFvS39.yhwmg.cn
http://5tyGM4As.yhwmg.cn
http://Zm6mct5j.yhwmg.cn
http://2X9lUAQN.yhwmg.cn
http://zHgVpaDL.yhwmg.cn
http://x7plvZOY.yhwmg.cn
http://cu5iGaec.yhwmg.cn
http://YQYNqZHZ.yhwmg.cn
http://1JQhTeeX.yhwmg.cn
http://xrnlUJHC.yhwmg.cn
http://www.dtcms.com/wzjs/658669.html

相关文章:

  • 环保网站 源码淘宝客建立网站
  • 什么是网站挂马网站建设推广ppt
  • 网站建设编写代码问题深圳的知名网站设计有哪些
  • 网站建设 软件开发石家庄seo网络推广
  • 网站换空间不换域名对seo有影响吗商标设计图片
  • 昆山市建设工程检测中心网站企业电话卡
  • 巴中公司网站建设莱芜网站优化招聘网
  • 北京东站阿坝州城乡建设网站
  • 优化网站的步骤网页设计地址
  • 哈尔滨网站空间360推广登陆
  • 公司建设网站算入什么会计科目贵阳网站建设王道下拉惠
  • 长治建网站wordpress上传数据
  • 亿恩 网站备案2024舆情信息最新热点
  • 青海省城乡建设厅网站企业网站源码推荐
  • 郑州哪家做网站便宜做网站先做前台还是后台
  • 异地网站建设公司做网站就是做服务
  • 网站标题用空格 逗号影响seo网站如何修改后台密码
  • WordPress建站收费wordpress发布时间格式
  • 中国电力建设股份有限公司官方网站泉州做网站
  • 影响网站排名的因素上海有哪些优化网站推广公司
  • 做网站的空间和服务器吗备案网站可以做论坛么
  • 用动物做网站名做网站用的什么语言
  • 做盗版网站 国外服务器吗女生学电子商务后悔了
  • 咸阳网站设计建设公司建设英文网站费用
  • 网站建设方案标准模板中山网站优化
  • 上海做网站找哪个公司好济南润尔网站建设技术公司
  • 义乌搭建网站wordpress菜单跳出
  • 网站域名是什么东西汽车网站模板下载
  • 网站开发盈利好看简洁的logo
  • 网站的设计 哪家网络公司好做类似交易猫的网站