论坛首页 Java企业应用论坛

大家对hibernate 级联的必要性是怎么个看法

浏览 10782 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-02-12  

如,有两个对象。User,Order(一个人可以有多个订单).那么这个是一对多关系。在建立ORM时:
1  user 实体(类伪码):

@Entity
@Table(name="t_user")
public class User{
  @Id
  @Column(name="id")
  private String id;
  @Column(name="username")
  private String username;
  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user")
  private Set<Order> orders;
}

 

2 order 实体(类伪码):

@Entity
@Table(name="t_order")
public class Order{
  @Id
  @Column(name="id")
  private String id;
  @Column(name="name")
  private String name;
  @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH},fetch = FetchType.LAZY)
  @JoinColumn(name = "user_id")
  private User user;
}

 

现在在考虑红字部分的必要性:

a  删除第一部分

b  第二部分,不级联,直接映射数据库的字段。@Column(name="user_id") private String userId;

我所知道的它的好处:

1  当获取User对象后,可以直接点取Order对象;

2  对应的级联特性;

对于这两点:

都可以通过显示增加代码量来完成。而且实际上,代码量并不是很多。

可以避免hibernate繁杂的映射关联。

 

我所不清楚的:在性能上面,有没有什么区别(我是觉得没有什么太大性能区别,而且换成显示控制,还可以增加灵活性)?

求教

 

 

   发表时间:2014-02-14  
不想用对象,那为什么要用hibernate?
0 请登录后投票
   发表时间:2014-02-14  
在业务变得复杂的时候,级联多恶心啊,要不用简单的hibernate不使用级联,要么用ibatis做到控制SQL
0 请登录后投票
   发表时间:2014-02-17  
业务逻辑变复杂的时候就直接用存储过程好了。
0 请登录后投票
   发表时间:2014-02-19  
建议不要用级联。因为随着项目的扩展,表会越来越多,关系会越来越复杂,到时可能出现一系列数据库问题
0 请登录后投票
   发表时间:2014-03-09  
leobluewing 写道
不想用对象,那为什么要用hibernate?

没有不想用对象。hibernate的特性方面了数据库操作。这个是毋容置疑的。
只是在思考,对象关联的必要性。当然如果业务逻辑很简单,无所谓用不用。主要是业务逻辑比较复杂。
0 请登录后投票
   发表时间:2014-03-09  
闲看漫随 写道
建议不要用级联。因为随着项目的扩展,表会越来越多,关系会越来越复杂,到时可能出现一系列数据库问题


其实仁兄说的,也是我的理解。但是不清楚这个到底合不合适。
有人跟我说过,出现各种问题是自己没有掌握hibernate。所以自己就‘迷失’了。。。
0 请登录后投票
   发表时间:2014-03-09  
liubey 写道
在业务变得复杂的时候,级联多恶心啊,要不用简单的hibernate不使用级联,要么用ibatis做到控制SQL


我也是这样想。但是因为我没有做过特别大的项目。所以我自己不确定。所以求教于大家。
想得到的是,实际项目的实际用法。
0 请登录后投票
   发表时间:2014-03-09  
请问大家为什么用hibernate?关于这点,我真的是一直没弄明白
0 请登录后投票
   发表时间:2014-03-09  
ThinkingQuest 写道
请问大家为什么用hibernate?关于这点,我真的是一直没弄明白

我猜猜(有可能不对):你应该没有太多的开发经验。一上来,就接触hibernate,jdbc会用,觉得挺好的。

其实hibernate之所以流行,就是大家多jdbc开发很是郁闷,长时间写的复杂的项目,后期很难维护。
如果我猜对了,等你再干两年你就知道了(或者自己试着去写一个不用hibernate的,稍微业务逻辑复杂一点的项目(肯定不是全写出来,想想如果不用的话,会是怎么样))。说再多都没有用。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics