hibernate key words

Explcitly evicting a cached instance from the first level cache
using Session.evict()

或者你正处理大量对象、需要对有效管理内存时,你可以调用 evict() 方法,从一级缓存中去掉这些对象及其集合。

Session 还提供了一个 contains() 方法,用来判断某个实例是否处于当前 session 的缓存中。
如若要把所有的对象从 session 缓存中彻底清除,则需要调用 Session.clear()。

By default, entities are not part of the second level cache and we recommend you to
stick to this setting.

实现 equals() 和 hashCode() 方法:
如果你有如下需求,你必须重载 equals() 和 hashCode() 方法:
•想把持久类的实例放入 Set 中(当表示多值关联时,推荐这么做),而且
•想重用脱管实例
Hibernate 保证,仅在特定会话范围内,持久化标识(数据库的行)和 Java 标识是等价的。
因此,一旦我们混合了从不同会话中获取的实例,如果希望 Set 有明确的语义,就必须实现
equals() 和 hashCode()

SessionFactory (org.hibernate.SessionFactory)
A thread-safe, immutable cache of compiled mappings for a single
database. A factory for org.hibernate.Session instances. A client of
org.hibernate.connection.ConnectionProvider. Optionally maintains a second level cache
of data that is reusable between transactions at a process or cluster level.

Session (org.hibernate.Session)
A single-threaded, short-lived object representing a conversation between the
application and the persistent store. Wraps a JDBC java.sql.Connection. Factory for
org.hibernate.Transaction. Maintains a first level cache of persistent the application's
persistent objects and collections; this cache is used when navigating the object
graph or looking up objects by identifier.

•集合(sets)
•包(bags)
所有的有序集合类(maps,lists,arrays)都拥有一个由 <key> 和 <index> 组成的主键。这种情
况下集合类的更新是非常高效的 — 主键已经被有效的索引,因此当 Hibernate 试图更新或删除
一行时,可以迅速找到该行数据。
集合(sets)的主键由 <key> 和其他元素字段构成。对于有些元素类型来说,这很低效,特别是
组合元素或者大文本、大二进制字段;数据库可能无法有效的对复杂的主键进行索引。另一方
面,对于一对多、多对多关联,特别是合成的标识符来说,集合也可以达到同样的高效性能。
( 附注:如果你希望 SchemaExport 为你的 <set> 创建主键,你必须把所有的字段都声明为 notnull="
true"。)
<idbag> 映射定义了代理键,因此它总是可以很高效的被更新。事实上,<idbag> 拥有着最好的性
能表现。
Bag 是最差的。因为 bag 允许重复的元素值,也没有索引字段,因此不可能定义主键。
Hibernate 无法判断出重复的行。当这种集合被更改时,Hibernate 将会先完整地移除 (通过一
个(in a single DELETE))整个集合,然后再重新创建整个集合。因此 Bag 是非常低效的。
请注意:对于一对多关联来说,“主键”很可能并不是数据库表的物理主键。但就算在此情况
下,上面的分类仍然是有用的。(它仍然反映了 Hibernate 在集合的各数据行中是如何进行“定

inverse 映射属性究竟表示什么呢?对于你和 Java 来说,一个双向关联仅仅是在两端
简单地正确设置引用。然而,Hibernate 并没有足够的信息去正确地执行 INSERT 和
UPDATE 语句(以避免违反数据库约束),所以它需要一些帮助来正确的处理双向关联。把关联的
一端设置为 inverse 将告诉 Hibernate 忽略关联的这一端,把这端看成是另外一端的一个镜象
(mirror)。这就是所需的全部信息,Hibernate 利用这些信息来处理把一个有向导航模型转移
到数据库 schema 时的所有问题。你只需要记住这个直观的规则:所有的双向关联需要有一端被
设置为 inverse。在一对多关联中它必须是代表多(many)的那端。而在多对多(many-to-many)
关联中,你可以任意选取一端,因为两端之间并没有差别。

可以使用 cascade="all" 将一个关联关系(无论是对值对象的关联,或者对一个集合的关联)标记
为父/子关系的关联。 这样对父对象进行 save/update/delete 操作就会导致子对象也进行 save/
update/delete 操作。

 

UserTransaction tx = (UserTransaction)new InitialContext()
.lookup("java:comp/UserTransaction");
tx.begin();
// Do some work on Session bound to transaction
factory.getCurrentSession().load(...);
factory.getCurrentSession().persist(...);
tx.commit();

 

 

hibernate.dialect
hibernate.show_sql=false
hibernate.format_sql=true
hibernate.default_schema=datiandou
hibernate.default_catalog
hibernate.session_factory_name
hibernate.max_fetch_depth
hibernate.default_batch_fetch_size
hibernate.default_entity_mode
hibernate.order_updates=true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值