V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
ren2881971
V2EX  ›  Java

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

  •  
  •   ren2881971 ·
    ren2881971 · Sep 10, 2014 · 9515 views
    This topic created in 4260 days ago, the information mentioned may be changed or developed.
    一直都是直接写sql 用jdbc操作数据库。
    工作时间大多数也是在专研业务知识或者维护老系统。
    对hibernate的了解还停留在刚毕业的时候。
    一直以为对hibernate都很不屑~ 觉得没有直接操作sql灵活,而且性能较差
    结果最近一个项目我脑袋短路了。突然想用SSH来完成。
    发现hibernate也没那么简单~(也可能是以前我用得不对~) 以前太小看他了...


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

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

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

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

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

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

    这用sql就是 查完父表 再查子表嘛~
    spacewander
        51
    spacewander  
       Sep 12, 2014
    @ren2881971 只用过Ruby的ActiveRecord和Python的SQLAlchemy的人表示……你说的东西也太复杂吧,完全听不懂……hibernate真是奇怪的orm。
    ren2881971
        52
    ren2881971  
    OP
       Sep 12, 2014
    @spacewander 唉 你们这些互联网程序员!
    ren2881971
        53
    ren2881971  
    OP
       Sep 12, 2014
    经过两天使用LZ 以身试法
    向大家展示了 no zuo no die why u try
    以后再也不用hibernate了。
    结贴!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1021 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 100ms · UTC 18:30 · PVG 02:30 · LAX 11:30 · JFK 14:30
    ♥ Do have faith in what you're doing.