NOTE:Hibernate-2010

来源:互联网 发布:淘宝买论文被骗 编辑:程序博客网 时间:2024/04/30 04:00

2009-12-10

为什么“单向一对多”并不推荐使用关联列而使用关联表呢?

JPWH一书中的解释是说:如果在“Many"方设外键关联,必须设为可空,而对于数据库设计来说,这增加了数据的“不确定性”。这个解释让人迷惑,我认为至少还有另外一种合理的解释,即:这种参照方式是与单向一对多表达的逻辑含义是相反的。单向一对多表达应该表达的是one方对many方地参照!从这个意义上来看,引入关联表是更合理的一种方式。

以Signage为例:

Signage到它的适用类型是一种典型的单向一对多关联!在这个关联中,下面的设计会让人觉得“怪异”,因为这样成了让适用类型主动去参照Signage了!

 

2010-1-15

getCurrentSession()创建的Session与事务绑定是这样完成的:
通过getCurrentSession()获得的这个Session实际上是一个代理,这个代理做了两个重要的工作:
1.强制通过session做任何操作前必须先调用begainTranscation,否则会抛异常。这一点确保了对session的使用总是从一个事物开始的。
2.当事务在commit或rollback后session会自动关闭。这一点确保了session与事物同时终结。
这样,session与transaction起始点至,便是所说的:session-per-transaction

2010-1-18

关于Session绑定的Context,Session和Transaction:

首先要明确:将Session绑定到某种上下文上是把Session实例放到这个上下文上,即保证在这个上下文中可以随时获得这个Session,并且是唯一的一个。而Session和Transaction之间的关系多指Session-Per-Transaction或是session-per-conversation这种Session和Transaction生命周期上的关系。

举一个例子:

Hibernate默认是将Session绑定到一个线程上,这样每个线程都有自己的一个独立的Session.这一点是通过ThreadLocal来实现的。这种模式同时设定了Session和Transaction之间的关系,即:Session-Per-Transcation.一个Session只有一个Transaction,并且与这个Session同生命周期.在没有begain一个Transaction时,session是不可用的。而当transaction关闭时,这个Session也一同关闭了。这是通过为Session生成一个代理类来实现的。

总之要明白:Session与其所属的上下文和Session与其生命周期内Transaction之间是两回事,要区分开来。但两者之间也是有联系。要注意它们之间微妙的关系。

2009-12-10

2009-12-10

2009-12-10

2009-12-10

2009-12-10

2009-12-10

原创粉丝点击