Hibernate如何处理外键?
首先,数据表中是不需要建立外键约束的,但需要有外键的字段吗?我认为应该是需要的其次,外键字段在实体类中应该怎样封装呢?是封装为一个普通属性,还是封装为对应的对象,并且配置...
首先,数据表中是不需要建立外键约束的,但需要有外键的字段吗?我认为应该是需要的
其次,外键字段在实体类中应该怎样封装呢?
是封装为一个普通属性,还是封装为对应的对象,并且配置为一对多,多对多等这种关联关系?
最后,如果封装为普通属性,insert和update的时候,对应的记录可能不存在,这就不合理了;
如果封装为对象,并且添加关联关系,查询的时候是方便了,但insert和update的时候,该怎么写代码 呢? 展开
其次,外键字段在实体类中应该怎样封装呢?
是封装为一个普通属性,还是封装为对应的对象,并且配置为一对多,多对多等这种关联关系?
最后,如果封装为普通属性,insert和update的时候,对应的记录可能不存在,这就不合理了;
如果封装为对象,并且添加关联关系,查询的时候是方便了,但insert和update的时候,该怎么写代码 呢? 展开
1个回答
展开全部
需要,一般用id作为外键。数据表中做不做外键约束都可以,各有优劣,一般是不做。
hibernate处理简单的对象关系比较方便,一旦业务复杂之后,复杂度会变得非常高。所以当对象关系很简单,层级只有一级的时候,用对象比较方便;关系略有复杂,就不要用hibernate的级联查询了,自己来处理。
普通属性做插入更新时,记录不存在也没关系,查询的时候排除掉就行。比较好的方式是在原数据表加个disable项,删除的时候是修改disable为1,而不是真的删除,这样就不用考虑记录不存在的情况了。
对象插入更新时,需要得到外键id,做个对象set进去就行。
User user = new User();
user.setId(userId);
Book book = new Book();
book.setUser(user);
book.setName("")
...
session.save(book);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询