hibernate
hibernate
車輪の唄
atarik@163.com
展开
-
mysql 索引数据结构
http://blog.codinglabs.org/articles/theory-of-mysql-index.html摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTr...原创 2019-01-16 22:41:07 · 412 阅读 · 0 评论 -
MySQL分页查询优化
一般分页查询一般的分页查询使用简单的 limit 子句就可以实现。limit 子句声明如下:SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offsetLIMIT 子句可以被用于指定 SELECT 语句返回的记录数。需注意以下几点:第一个参数指定第一个返回记录行的偏移量 第二个参数指定返回记录行的最大数目 如果只给...转载 2018-09-17 16:45:32 · 171 阅读 · 0 评论 -
json infinite recursion stackoverflowerror
报错:json infinite recursion stackoverflowerror双向关联时,出现双向引用导致json序列化时死循环解决办法:在setter方法上加注解@JsonBackReference或者@jsonjgnore原创 2018-09-12 17:31:06 · 230 阅读 · 0 评论 -
关于hibernate的一些总结
1.hql查询得到一个完整的实体对象,通过set操作改变对象里的属性后,会自动执行update操作2.hql查询得到一个完整的实体对象,是不存在一级缓存的3.原生sql查询得到一个完整对象,会放入一级缓存4.同一事务中,在执行persist方法后,自增id的id值就已经可以得到了,而不是事务提交时才能获取5.同一事务中,通过update语句修改某实体字段,再次使用hql查询时,得到...原创 2018-08-21 10:10:42 · 181 阅读 · 0 评论 -
onetomany非主键关联报错
Caused by: org.hibernate.MappingException: Unable to find column with logical name: position_id in org.hibernate.mapping.Table(user) and its related supertables and secondary tables @JsonIgnore...原创 2018-08-21 09:54:32 · 3849 阅读 · 3 评论 -
单表多租户的select/update/delete实现--@filter
@FilterDef(name="bookFilter",parameters={@ParamDef(name="perchase_cell_id",type="long")})@Filter(name="bookFilter",condition="perchase_cell_id = :perchase_cell_id")@Setter@Getter@MappedSuperclass...原创 2018-08-23 19:24:30 · 491 阅读 · 0 评论 -
hibernate级联查询的懒加载
结论: 使用迫切加载时是级联查询,只执行一条sql, 使用懒加载是执行多条sql. 和之前的认知不同执行一条sql的前提:查询条件是id,且级联对象迫切加载 实体对象@Id private Long id; private String uid; private Integer trade_type; private Integer status;...原创 2018-08-06 19:01:57 · 991 阅读 · 0 评论 -
hibernate级联查询懒加载时json错误解决
Could not write content: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer hibernate延时加载因为jsonplugin...原创 2018-08-06 15:21:56 · 563 阅读 · 0 评论 -
hibernate以关联多对一字段做查询
public class RestaurantDto { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private long userId; private String name; private String tags; privat...原创 2018-06-19 19:11:04 · 906 阅读 · 0 评论 -
确认收货(app后台手动确认和数据中心自动确认冲突问题解决)
String key = "auto_confirm_order:"+TenantContext.get(); Long result = stringRedisTemplate.boundSetOps(key).add(orderUid); if(result <= 0) { throw new YuncaiException("请刷新订单状态"); }现在使用的方案是确...原创 2018-05-28 18:42:28 · 1150 阅读 · 0 评论 -
单边多对一:order和location
@ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "location_id") private LocationDto location;public class LocationDto { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) priv...原创 2018-04-20 21:35:56 · 221 阅读 · 0 评论 -
hibernate查询使用默认锁,加读锁,加写锁测试
UserDao@Repositorypublic class UserDao { @PersistenceContext private EntityManager entityManager; public User get(Long id) { String hql = "select u from User u where id = :id";...原创 2018-04-20 09:17:21 · 1577 阅读 · 0 评论 -
hibernate使用@where实现条件过滤功能
@Where(clause = "delivery_type != 2")原创 2018-04-19 18:42:34 · 810 阅读 · 0 评论 -
mysql联合索引查询优化
在利用B-Tree索引进行查询的过程中,有几点注意事项,我们以表A进行说明。其中表A的定义如下: create table A(id int auto_increment primary key, name varchar(10), age tinyint, sex enum('男','女'), birth datatime, key(name,age,sex)); id为主键,并在name...原创 2018-09-18 12:21:46 · 1291 阅读 · 0 评论 -
mysql中的游标
游标只能用于存储过程!!!1.游标是啥玩意?简单的说:游标(cursor)就是游动的标识,啥意思呢,通俗的这么说,一条sql取出对应n条结果资源的接口/句柄,就是游标,沿着游标可以一次取出一行。我给大家准备一张图:2.怎么使用游标?//1.声明/定义一个游标declare 声明;declare 游标名 cursor for select_statement;//2.打开一个游标...原创 2018-10-11 15:54:19 · 535 阅读 · 0 评论 -
@SecondaryTable
规格和分组价是一对多的关系, 所以使用@SecondaryTable注解后, 在查询SpecificationWithItemAndGroup实体时, 会出现重复数据. 在使用SpecificationWithItemAndGroup实体查询并且限制了关联表的条件可以锁定一个商品只出现一次, 如把groupId作为条件参与筛选so, 注意@OneToMany和@SecondaryTable注解...原创 2019-01-18 09:28:33 · 1188 阅读 · 0 评论 -
OpenEntityManagerInViewInterceptor与spring.jpa.open-in-view
1. 在springboot中,spring.jpa.open-in-view值是默认开启的2. 开启open-in-view的意义: 在事务外也可以访问懒加载的数据hibernate 允许对关联对象、属性进行延迟加载,但是必须保证延迟加载的操作限于同一个 Hibernate Session 范围之内进行。如果 Service 层返回一个启用了延迟加载功能的领域对象给 Web 层,当 We...原创 2019-01-17 11:22:04 · 6781 阅读 · 1 评论 -
mysql 连接8小时问题 Could not open JPA EntityManager for transaction
原因: 数据库的链接默认的超时时间是8个小时,如果在8个小时里没有访问,那么这个连接就会被回收如下配置tomcat连接池(log-data-server-yy工程中的配置)#tomcat连接池配置spring.datasource.tomcat.initial-size=10spring.datasource.tomcat.max-active=100spring.datasour...原创 2018-12-29 16:52:53 · 2713 阅读 · 0 评论 -
mysql中字符串索引
1.只是用字符串的最左边n个字符建立索引,推荐n<=10;比如index left(address,8),但是需要知道前缀索引不能在order by中使用,也不能用在索引覆盖上。2.对字符串使用hash方法将字符串转化为整数,address_key=hashToInt(address),对address_key建立索引,查询时可以用如下查询where address_key = hash...原创 2018-12-18 22:52:37 · 2694 阅读 · 0 评论 -
hash索引 VS B+树索引
hash索引 优点:速度快 缺点:只能进行等值查询,不能进行范围检索,不能进行排序,不能利用 部分索引键查询 B+树索引 优点:可以进行范围查询,支持最左前缀查询 缺点:由于是多级索引速度相对慢些...原创 2018-12-18 21:40:25 · 496 阅读 · 0 评论 -
关于多租户切换, 线程, 事物
1.租户切换必须在事物开始前, 即在@transaction注解外切换租户2.@async注解在同一个类中调用无效3.同一个类中, 方法A有事务, 方法B无事务, 方法B调用方法A会导致事务失效线程-> 租户切换 -> 开启事务(注意事务嵌套)以上三个步骤最好在三个类中完成 参见 https://blog.csdn.net/asdfsadfasdfsa/arti...原创 2018-12-23 17:42:39 · 889 阅读 · 0 评论 -
hibernate在级联查询时 cannot be cast to java.io.Serializable的问题
解决: 在 Entity中加入 implements Serializable原因; Hibernate 有二级缓存, 缓存会将对象写进硬盘。就必须序列化。以及兼容对象在网络钟的传输原创 2018-12-17 15:11:19 · 1197 阅读 · 0 评论 -
mysql表结构同步
一, 首先找到两个数据库间的差异sql根据navicat的结构同步, 生成执行sql脚本, 但是该脚本的初始语句取消外键限制无效, 所以需要对生成的脚本文件修改将所有的ALTER TABLE `warehouse_inventory_log` DROP INDEX `fk_purchecell_inventory_log_idx_idx`; DROP INDEX语句都放到该表的最后面执行...原创 2018-11-15 16:24:12 · 1605 阅读 · 0 评论 -
事务中包住异常sql执行结果
public void test(Long id){ shopCartDao.deleteTest(10089L); try { shopCartDao.deleteTest(12261L); if(true) throw new YuncaiException(""); ...原创 2018-11-05 10:26:04 · 394 阅读 · 0 评论 -
hibernate中sql执行时机
ShopCartDto shopCartDto = shopCartDao.findTest(id);shopCartDto.setQuantity(shopCartDto.getQuantity()+1);System.out.println("qqqqqqqqq " + shopCartDao.findByHqlTest(id).getQuantity());shopCartDto....原创 2018-11-02 10:12:16 · 865 阅读 · 0 评论 -
@JoinTable的使用
两张表通过中间的关联表做联系时使用,即多对多关系,见权限分配@ManyToMany(cascade = { CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH } , fetch = FetchType.EAGER)@JoinTable(name = "position_source_...原创 2018-10-27 11:47:08 · 11190 阅读 · 1 评论 -
MySQL内置函数uuid和uuid_short
用法 简单看到,这个值,每次执行都是不同的。生成规则第1 2 3 段是与时间有关的。time_low、time_mid、time_high_and_version转成16进制后分别对应第1 2 3段。这个时间是从1582-10-15 00:00:00.00到当前时间的100ns值。(实际上系统只能取到精确us,再乘以10)。所以你短时间连续执行的话,比较可能...原创 2018-10-29 10:01:45 · 1357 阅读 · 0 评论 -
mysql关于索引查询优化
主要参照<高性能mysql>一:1. 关于联合索引查询:https://blog.csdn.net/asdfsadfasdfsa/article/details/827558372.聚簇索引即是表, 其他地方无需再存储? 3.非聚簇索引叶子节点存储的是主键值, 所以查询需要两次遍历B+树4.like查询通配符不在最前是可以使用索引的5.对于小数据量的表, 全表扫...原创 2018-10-12 12:55:43 · 150 阅读 · 0 评论 -
mysql in与or查询
关于IN和OR的区别,在High performance mysql 3rd中,有一段话描述的非常清楚:IN() list comparisonsIn many database servers, IN() is just a synonym for multiple OR clauses, because the two are logically equivalent. Not so in...原创 2018-10-12 12:33:23 · 1847 阅读 · 0 评论 -
mysql explain 的type解释
连接操作的类型(1)SYSTEMCONST的特例,当表上只有一条元组匹配(2)CONSTWHERE条件筛选后表上至多有一条元组匹配时,比如WHERE ID = 2 (ID是主键,值为2的要么有一条要么没有)(3)EQ_REF参与连接运算的表是内表(在代码实现的算法中,两表连接时作为循环中的内循环遍历的对象,这样的表称为内表)。基于索引(连接字段上存在唯一索引或者主键索引...原创 2018-10-11 18:51:06 · 1738 阅读 · 0 评论 -
MySQL索引合并优化
如果没有索引合并, 则在多个单列索引中优化器只会选取最有的一个索引使用, 其余的索引将舍弃根据官方文档中的说明,我们可以了解到:1、索引合并是把几个索引的范围扫描合并成一个索引。2、索引合并的时候,会对索引进行并集,交集或者先交集再并集操作,以便合并成一个索引。3、这些需要合并的索引只能是一个表的。不能对多表进行索引合并。怎么确定使用了索引合并在使用explain对sql语...原创 2018-10-11 18:38:47 · 422 阅读 · 0 评论 -
从数据库层面理解:随机 I/O & 顺序 I/O
通常、我们把 <=16KB 的I/O认为是小I/O、而 >=32KB 的I/O认为是大I/O 了解I/O的大小、影响到后期对缓存、RAID类型、LUN的一些属性的调优 当前大多数数据库使用的都是传统的机械磁盘 因此、整个系统设计要尽可能顺序I/O 避免昂贵的寻道时间和旋转延迟的开销 随机小I/O消耗比顺序大I/O更多的处理资...原创 2018-10-11 17:11:17 · 1049 阅读 · 0 评论 -
JPA中persist()和merge()的区别
原文: https://stackoverflow.com/questions/1069992/jpa-entitymanager-why-use-persist-over-mergeEither way will add an entity to a PersistenceContext, the difference is in what you do with the entity afte...原创 2018-04-22 19:50:50 · 5501 阅读 · 0 评论 -
JPA EntityManager persist 方法详解(不允许提前设置id)
@Test public void testPersistence(){ EntityManagerFactory factory; EntityManager manager; EntityTransaction transaction; factory = Persistence.createEntityManagerFa...原创 2018-03-04 22:16:33 · 15294 阅读 · 1 评论 -
mysql autocommit
1、autocommit是mysql中的InnoDb数据表特有的语句。(只有在表引擎=InnoDb时,autocommit才会生效)原理:在InnoDb表中,所有的语句都是需要commit后,才会在真实数据库中生效。eg:InnoDb数据库引擎 : update tablenam set id = 999 where id = 1;(缓存生效) commit;(真实生效)其它数据库引擎...原创 2018-03-04 10:01:56 · 920 阅读 · 0 评论 -
MVCC(Multi-Version Concurrency Control) 多版本并发控制
MVCC的实现,是通过保存数据在某个时间点的快照来实现的.InnoDB的MVCC是通过在每行记录后面保存2个隐藏的列来实现的,一列保存了行的创建时间,一列保存了行的过期时间(或删除时间).但它们都存储的是系统版本号MVCC最大的作用是: 实现了非阻塞的读操作,写操作也只锁定了必要的行.MYSQL的MVCC 只在 read committed 和 repeatable read ...原创 2018-03-04 10:00:19 · 2303 阅读 · 0 评论 -
JDBC详解
一、相关概念1.什么是JDBC JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。2.数据库驱动 我们安装好数据库之后,我们的应用程序也是不能直...原创 2018-01-25 20:41:34 · 202 阅读 · 0 评论 -
MySQL AutoCommit带来的问题
现象描述测试中发现,服务A在得到了服务B的注册用户成功response以后,开始调用查询用户信息接口,却发现无法查询出任何结果。检查binlog发现,在查询请求之前,数据库确实已经完成了commit操作,并且可以在sqlyog等客户端工具中查询出正确的结果。下面是这个流程的时序图:问题出现在Server A向数据库发起查询的时候,返回的结果总是空。问题分析这个问题显然是一个事务隔离的问题,最开始的...原创 2018-03-02 18:57:30 · 1088 阅读 · 0 评论 -
多线程update mysql的问题
@RunWith(SpringRunner.class)@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)public class JunitTest { @Autowired private ProduceOrderRepository p; @Autowired private S...原创 2018-03-16 12:10:16 · 3337 阅读 · 0 评论 -
多service事务嵌套
1. 多service嵌套, 事务以最外层为主, 只要任一层有异常抛出, 事务就会回滚, 也就是任一层sql都会回滚2.如果设置某一层service屏蔽掉指定异常,不做回滚(1) 最外层service 使用注解@Transactional(noRollbackFor=ShopCartLoseException.class)(2) 只做(1)注解将会抛出:Transaction marked as ...原创 2018-03-09 19:40:36 · 4045 阅读 · 0 评论