最近重构项目想偷懒使用hibernate自动创建表 。
@ManyToOne场景中@JoinColumn 中可设置nullable 但是不管设置为true还是false,该字段均不可为空
后来想了一想确实有了外键关系,该字段是不可为空的。
但是业务需求:任务表关联结果表,但是任务不一定有结果,
这个时候需要级联查询不需要写sql时候【虽然级联每次用到用不到都会查询 lazy除外】
就需要直接关联到结果的,因为一般都是有结果嘛,少年。
有时候标准在可以的时候要为业务让步这样?
再生成表之后:在drop字段 add字段不好,有主外键关系,必须先不检查外键才能drop。
set FOREIGN_KEY_CHECKS = 0;
alter table table_name drop COLUMN vul_plugin_id;
alter table table_name add COLUMN `vul_plugin_id` bigint(20);
SET FOREIGN_KEY_CHECKS = 1;
建议:还是自己source 导出初始化脚本。维护一套表关系,不需要实体自动创建。
懒加载问题:关联查询加载类型lazy,session在service层关闭,序列化bean时报错无法加载代理对象。
增加pom依赖
<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-hibernate4</artifactId> <version>2.2.3</version> </dependency>
@Bean public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); Hibernate4Module hibernate4Module = new Hibernate4Module(); hibernate4Module.disable(Hibernate4Module.Feature.USE_TRANSIENT_ANNOTATION); objectMapper.registerModule(hibernate4Module); objectMapper.setSerializationInclusion(Include.NON_NULL); return objectMapper; }@primary