首页 > 编程知识 正文

外键关系如何设置(idea注册码在线生成)

时间:2023-05-04 05:46:47 阅读:71454 作者:4110

JPA配置不生成外键。 查看源代码并创建外键的SQL语句是从Dialect的StandardForeignKeyExporter对象生成的。 通过JPA(hibernate ),可以自定义Dialect的“解析器”。 因此,首先配置自定义的DialectResolver,用分析Dialect的方法直接转录标准dardDialectresolver内的代码,获取正确的dialect,然后在cglib中动态生成代理类向他返回自定义的StandardForeignKeyExporter类,并将getSqlCreateStrings方法的返回值直接更改为Exporter.NO_COMMANDS,以防止检索创建外键的SQL语句

MyInterceptor.java (作用: cglib方法拦截器, 拦截类方法) publicclassmyinterceptorimplementsmethodinterceptor 652 @ overridepublicobjectinterrcect method method,object [ methodproxymethodproxy (throws throwable (/直接返回exporter.no_commandsif ) method.getname ).equals ) ' getforeignkeyyye { returnnewstandardforeignkeyexporter () lcreatestrings ) ) foreignkeyforeect } @ override public string [ ] getsqldropstrings (foreign key foreign key,元数据}; } returnmethodproxy.invoke super (object,objects ); } mystandarddialectresolver.Java (自定义dialectresolver ) importorg.hibernate.dialect.database; importorg.hibernate.dialect.dialect; importorg.hibernate.engine.JDBC.dialect.SPI.dialectresolutioninfo; importorg.hibernate.engine.JDBC.dialect.SPI.dialect resolver; importorg.spring framework.cglib.proxy.enhancer; /** *自定义方言解析器* * @ author : yx * @ date :2021/12/10 * */publicclassmystandarddialectresolverimplementsdialectresolver { @ overridepublicdialectresolvedialect (直接解决方案信息服务) 0database.values () ) dialect dialect=database.resolve dialect ) info ); if(Dialect!=null (myinterceptormyinterceptor=newmyinterceptor ); 增强器增强器=新增强器(; enhancer.set super class (dialect.getclass ) ); //设置超类,cglib是通过继承实现的增强器. set callback (my interceptor ); 返回(dialect ) enhancer.create ); } }返回空值; 在application.yml (或properties )上运行dialectresolverspring 3360 JPA : show-SQL : true open-in-view : true hibernate 333330 要创建的enable _ lazy _ load _ no _ trans 3360 true #自定义dialectresolverdialect _ resolvers 3360 com.ACR absoft.web.develop

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。