V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ren2881971
V2EX  ›  Java

身披 java 工程师的皮工作了两年,今天才发现对 hibernate 了解的太少太少了~

  •  
  •   ren2881971 ·
    ren2881971 · 2014-09-10 21:14:39 +08:00 · 8760 次点击
    这是一个创建于 3728 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一直都是直接写sql 用jdbc操作数据库。
    工作时间大多数也是在专研业务知识或者维护老系统。
    对hibernate的了解还停留在刚毕业的时候。
    一直以为对hibernate都很不屑~ 觉得没有直接操作sql灵活,而且性能较差
    结果最近一个项目我脑袋短路了。突然想用SSH来完成。
    发现hibernate也没那么简单~(也可能是以前我用得不对~) 以前太小看他了...


    比如:
    关系映射 many-to-one
    比如:
    二级缓存
    53 条回复    2014-09-12 10:59:34 +08:00
    zava
        1
    zava  
       2014-09-10 21:52:17 +08:00
    JPA 不是正道, 围绕着 SQL 转,又没有 SQL 的表现力.
    ren2881971
        2
    ren2881971  
    OP
       2014-09-10 22:17:50 +08:00
    @zava 平时都是直接写sql的。 但是公司现在总想着兼容多数据库。 这本身就是矛盾的。
    当然也不排除我sql 写够了 想用用hibernate尝尝鲜。。
    rayu
        3
    rayu  
       2014-09-10 22:25:56 +08:00
    最近刚加入一家新公司,经理居然规定死了只能用spring data jpa,各种难受,借lz帖子吐槽一下。
    ren2881971
        4
    ren2881971  
    OP
       2014-09-10 22:27:59 +08:00
    @rayu 欢迎吐槽~ 话说spring 那个jpa 好用么? 前一阵我们组长搭了一套 spring mvc + spring core + spring jpa + spring security的环境~
    我总感觉有点牵强附会,生用的感觉~
    unionx
        5
    unionx  
       2014-09-10 22:32:04 +08:00
    hibernate 大法好,自己写 sql 早晚被坑
    reeco
        6
    reeco  
       2014-09-10 22:41:04 +08:00
    我喜欢直接写SQL
    ren2881971
        7
    ren2881971  
    OP
       2014-09-10 22:48:28 +08:00
    @unionx 这个要看 sql掌握的程度和是否需要跨数据库 根据实际应用来度量的。
    不是什么大法就用那个的。 再说hibernate目前在哪儿都被黑出了翔吧
    suliuyes
        8
    suliuyes  
       2014-09-11 00:54:25 +08:00
    1:绝大多数项目都不需要跨数据库,你真的需要hibernate吗?跨了就没选择了。
    2:已经会sql了为什么还需要耗费心思学ORM框架?投资回报性价比高吗?确定不考虑mybatis?
    AIRPLAY
        9
    AIRPLAY  
       2014-09-11 08:22:50 +08:00
    @suliuyes 和ibatis什么关系?
    Aegwynn
        10
    Aegwynn  
       2014-09-11 08:32:15 +08:00
    @AIRPLAY 同一个东西,2010年由apache software foundation 迁移到了google code,并且改名为MyBatis
    bigzhu
        11
    bigzhu  
       2014-09-11 08:40:25 +08:00 via Android
    等被坑过你就知道这些orm有什么不好了。到一定数量级,必须写sql
    qq2511296
        12
    qq2511296  
       2014-09-11 08:49:52 +08:00   ❤️ 1
    查数据大的时候 不要用HQL 例如一些报表的查询的时候 尽量都用原生sql查询 效率会提高很多
    hcymk2
        13
    hcymk2  
       2014-09-11 09:18:17 +08:00
    把一个不太了解的工具当作银弹,万灵药,不坑你才怪。
    zouxcs
        14
    zouxcs  
       2014-09-11 09:23:20 +08:00
    习惯了自己写sql,经常用mybatis,配置简单。
    tflz514
        15
    tflz514  
       2014-09-11 09:25:21 +08:00
    ffffwh
        16
    ffffwh  
       2014-09-11 09:39:16 +08:00
    据说ORM被吐槽很多?谁顺手贴几篇文章给看看?
    kengle
        17
    kengle  
       2014-09-11 09:49:18 +08:00
    那么多人唱衰 orm 啊, orm 这东西是个好黑的箱子, 里面一堆的代码注入, 而且 bean 的管理好复杂, 特别是 hibernate, 一不小心就踩到坑.
    不过话说回来, 小项目用 orm 效果还是很好的, 等项目变大了再纯 sql 也不迟啊.
    gouflv
        18
    gouflv  
       2014-09-11 09:56:21 +08:00
    学习归学习, 真的试试就知道了
    hcymk2
        19
    hcymk2  
       2014-09-11 10:08:56 +08:00
    这是一篇很老的帖子
    http://www.iteye.com/topic/148055
    ren2881971
        20
    ren2881971  
    OP
       2014-09-11 10:35:58 +08:00
    @all 只是想尝试下而已~ 主要了解下以后找工作用的到啊~ 这个是肯定的。
    我个人还是喜欢直接操作sql
    @suliuyes 话说mybatis 是原生sql 直接操作数据库的是么? 跟dbutils 类型?
    ren2881971
        21
    ren2881971  
    OP
       2014-09-11 10:37:21 +08:00
    @ffffwh 只是听说~ 还没踩过坑。 本着no zuo bie 的 心里居然尝试下~
    gaicitadie
        22
    gaicitadie  
       2014-09-11 10:43:15 +08:00
    可能java语言本身繁琐不适合orm吧,歪个楼说说python和ruby框架中的orm,django和rails使用orm都很爽啊,写orm也会思考它生成的sql,但orm写起来要简洁清晰的多。
    ren2881971
        23
    ren2881971  
    OP
       2014-09-11 10:57:42 +08:00
    @gaicitadie 虽然你的头像是盖茨。。
    你说的那些语言都还没应用在企业开发。还都是互联网应用 网站 论坛啥的。 数据结构比较简单。
    也很少复杂关系的查询。所以才觉得爽吧~
    unionx
        24
    unionx  
       2014-09-11 11:07:03 +08:00
    @ren2881971 是有些黑点,但是还是有不少人最后老老实实去用了
    gaicitadie
        25
    gaicitadie  
       2014-09-11 11:14:04 +08:00
    @ren2881971 太过复杂关系的查询没做过,对many to one,many to many这些,django的orm用起来很方便,只需要select_related方法,就可以多表关联查询
    windyboy
        26
    windyboy  
       2014-09-11 11:23:29 +08:00
    和楼主相反
    玩了多年的对象操作以后
    我觉得还是写sql舒心
    ioth
        27
    ioth  
       2014-09-11 11:41:19 +08:00
    第二个境界,过了三个再谈感觉。
    qping
        28
    qping  
       2014-09-11 12:23:50 +08:00 via iPhone
    最早用jdbc,觉得hibernate好厉害,不用写sql,不用自己装配对象。后来用公司的框架,更牛逼,后台不用写,写写js就好。用多就吐了,还是mybatis好,既有掌握一切的感觉:写sql,又不能做那些苦力活:装配对象。

    hibernate实在是对他了解甚少,调用存储过程也是很麻烦,后台自动生成的sql也丑(这是最关键的),还是比较喜欢:越简单效率越高的
    seeker
        29
    seeker  
       2014-09-11 12:36:38 +08:00
    5年Java表示还没用过hibernate,,,感觉还是手写sql比较有安全感。
    HunterPan
        30
    HunterPan  
       2014-09-11 12:48:17 +08:00
    复杂的用sql,简单的hql。很鄙视hibernate,所以不愿意学习
    Narcissu5
        31
    Narcissu5  
       2014-09-11 12:52:15 +08:00
    很简单,你已经有SQL,为什么还需要HQL,Criteria 同理。

    我是很喜欢play2带的anorm,相当赞~
    TimLang
        32
    TimLang  
       2014-09-11 13:05:01 +08:00
    不做java好久,还是推荐ibatis,特别是公司里面有DBA的,保证不坑。
    小项目hibernate用用还可以,规模上去了,看起来不方便的sql未必会给你带来麻烦。。
    ren2881971
        33
    ren2881971  
    OP
       2014-09-11 13:35:46 +08:00
    好吧~ 看来大家还是对 hibernate 很排斥的态度。
    其实我只是会用而用~
    以免跳槽 被说连hibernate 都不会用~
    hcymk2
        34
    hcymk2  
       2014-09-11 13:52:52 +08:00
    loryyang
        35
    loryyang  
       2014-09-11 14:00:28 +08:00
    hibernate这种就是加速开发效率的,我觉得有条件的都可以使用,毕竟效率高。至于后期性能问题什么的,到时候再升级呗。没必要上来就高大上。另外说实话,你也不一定能做出高大上的东西来
    est
        36
    est  
       2014-09-11 14:11:54 +08:00
    sql 本质是什么,sql 本质就是本地代码远程通过RPC执行。orm本质是什么,orm本质是RPC的一种封装。

    and all wrappers are leaky.
    cougar
        37
    cougar  
       2014-09-11 14:12:34 +08:00
    各行各业比比皆是
    Lucups
        38
    Lucups  
       2014-09-11 14:19:34 +08:00
    没有好不好,只有合不合适。
    Lucups
        39
    Lucups  
       2014-09-11 14:20:02 +08:00
    小孩才分好坏,大人只看利弊。
    rayu
        40
    rayu  
       2014-09-11 14:44:19 +08:00
    jpa 学习成本维护高,不熟的还是不建议使用。
    rayu
        41
    rayu  
       2014-09-11 14:44:32 +08:00
    hibernate也是一个德行
    raychar
        42
    raychar  
       2014-09-11 15:01:46 +08:00
    只了解到一对多 多对一那些的程度,折腾很久,然后放弃。
    xiaowangge
        43
    xiaowangge  
       2014-09-11 17:53:30 +08:00
    公司的原则是:

    能不用 Hibernate(搭配 MySQL)就尽量不用。项目中几乎看不到 Hibernate 影子。

    我们使用腾讯云的 CMem 存储。
    robertlyc
        44
    robertlyc  
       2014-09-11 17:56:42 +08:00
    activerecord爆hibernate几十条马路
    ren2881971
        45
    ren2881971  
    OP
       2014-09-11 18:08:36 +08:00
    @robertlyc 你这我是没听过啊~
    ren2881971
        46
    ren2881971  
    OP
       2014-09-11 18:13:27 +08:00
    @qping 有空研究下~ spring mvc+ mybatis
    xuan_lengyue
        47
    xuan_lengyue  
       2014-09-11 19:02:15 +08:00
    ORM 少碰为妙,最近一个项目用了 Entity Framework,坑实在太多了。
    最大的一个问题是有些用 SQL 很轻松就实现的东西在 EF 里面非常难实现或者根本就没法实现。
    然后发现大部分数据层逻辑都用 EF 实现了,会有一种骑虎难下的感觉。
    wintersun
        48
    wintersun  
       2014-09-11 19:26:02 +08:00
    @Lucups 同意,没有银弹,只有适合。认清楚各种技术的优缺点,分析要实现的系统场景,裁裁剪剪,剪剪裁裁,终成大家!^_^
    ren2881971
        49
    ren2881971  
    OP
       2014-09-11 19:51:42 +08:00
    @xuan_lengyue orm 坑是一点。 更多情况是使用者没弄明白就开始瞎用了
    ren2881971
        50
    ren2881971  
    OP
       2014-09-11 20:12:15 +08:00
    第一个坑来了。。。
    hibernate的关系映射延迟加载 需要session在对象使用的时候一直开着。也就是一直持有session。
    但是spring 的DAO模式 HibernateTemplate 确在每个方法完毕后即关闭session。
    这两个结合一起绝壁了。
    这到底让不让我使用关系映射延迟加载啊!

    这用sql就是 查完父表 再查子表嘛~
    spacewander
        51
    spacewander  
       2014-09-12 09:51:23 +08:00
    @ren2881971 只用过Ruby的ActiveRecord和Python的SQLAlchemy的人表示……你说的东西也太复杂吧,完全听不懂……hibernate真是奇怪的orm。
    ren2881971
        52
    ren2881971  
    OP
       2014-09-12 10:28:45 +08:00
    @spacewander 唉 你们这些互联网程序员!
    ren2881971
        53
    ren2881971  
    OP
       2014-09-12 10:59:34 +08:00
    经过两天使用LZ 以身试法
    向大家展示了 no zuo no die why u try
    以后再也不用hibernate了。
    结贴!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2834 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 00:05 · PVG 08:05 · LAX 16:05 · JFK 19:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.