hibernate 和 mybatis 的 session 都不是线程安全的,为什么还要用?

85 天前
 iintothewind
很多集合操作本来可以很方便的 paralStream 然后调用数据库处理,
或者从 servlet 主线程拿到数据提交异步操作处理。

但由于 hibernate 和 mybatis 的 session 都不是线程安全的,
导致在多线程环境下,
通过 hibernate 和 mybatis 的数据库改动可能会出现问题,

如果从多线程操作数据库的角度考虑,
我是真的不喜欢这俩老掉牙的难用的框架,
真的不喜欢。

大家有什么看法?
4392 次点击
所在节点    Java
61 条回复
Goooooos
85 天前
@hi9527 每个线程要操作数据库前都需要从连接池里取出一个连接,这个连接并非线程安全,不能多个线程同时使用同一个数据库连接。
可以认为,mybatis 的一个 session 就代表一个数据库连接。
hefish
85 天前
我觉得 op 说的很对,要是有一个啥都支持,啥都支持的非常非常非常好的框架,那就完美了。。。
cleanery
85 天前
“session 都不是线程安全的”
要不听听你在说什么,session 不能共享,这不是很正常的?
session 和一个事物是绑定的,一般来说,每个线程都是通过 SqlSessionFactory 创建自己的 session 。
我第一次见到有人把 session 用到多线程环境的
cleanery
85 天前
@cleanery 事物->事务
GoRoad
85 天前
op 现在全面切成 jdbi 了吗?对比 hibernate 和 mybatis 有什么感觉
iintothewind
85 天前
@Vegetable #19 不讨论技术问题, 就人身攻击, 而且直接针对所有 java 开发者? 这就是你的含金量?
干的漂亮! 兄弟.
可是我不止用 java, 我用好多其他语言, 你就只用一种开发语言吗? 哥们?
justNoBody
85 天前
我想想看看 OP 的代码,脱敏发一下可以么
iintothewind
85 天前
@GoRoad #25 偶尔用, 因为历史原因, 不得不跟 jpa 打交道, 所以只能边吐槽边用啊.
我是不偏向任何技术,
觉得好的就说好, 我很喜欢.net 的 linq 可惜 java 没有.
iseki
85 天前
因为在设计上就没打算让你多线程使用 Session 对象,因为单个会话的数据库操作是不能并发的,支持多线程操作单个会话毫无意义。
GoRoad
85 天前
@iintothewind #28 那能看一下你在使用 jpa 的时候是怎么处理线程不安全的吗,这方面确实是没注意过
iintothewind
85 天前
@GoRoad #30 我就尽量不用 jpa 在多线程环境下做改变数据库的操作, 只用 select 没问题的, 改动放到主线程就好了啊.
Ayanokouji
85 天前
map 也不是线程安全,是不是也没必要存在了
iintothewind
85 天前
@Ayanokouji #32 "map 也不是线程安全", 你说错了吧? 你想说的是 HashMap 不是线程安全的吧? Map 有很多其它实现啊, java11 之后 Map 支持 Map.ofEntries()创建不可变 Map, 大部分场景你只需要用这个 api 就可以了,而这个 api 创建的 map 是线程安全的, welcome, 兄弟.
Ayanokouji
85 天前
@iintothewind 有了 Map.ofEntries(),那还要 new hashmap 干啥。你咋不全用 java.util.concurrent 包下的呢
Ayanokouji
85 天前
Vector 是线程安全的,你把 arrayList 都替换掉啊
iintothewind
85 天前
@Ayanokouji #35 抬杠好玩吗? 哈哈哈
Ayanokouji
85 天前
@iintothewind 你自己菜,连个问题都不会问,讲不过就只会说抬杠。再说了 Java 有真正的 Immutable 吗,反射照样改,照样能做到线程不安全,你啥也别用啊。java 自己还有 unsafe api ,继续解释啊。
RandomJoke
85 天前
1. 本身用公共池的 parallelStream 就不适合处理 io 密集的任务,把 io 任务和计算任务放一起会有很多问题
2. SessionFactory 是线程安全的
3. session 用来处理事务的,和多线程本身就有冲突啊- -
iintothewind
85 天前
@Ayanokouji 你赢了,😄
iintothewind
85 天前
@geligaoli #18 没错, 我用 jpa 时就是这样的用法, 但还是想吐槽, 唉.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1065374

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX