Hibernate入门(2)

(1)Hibernate部分类介绍
SessionFactory (org.hibernate.SessionFactory)
针对单个数据库映射关系经过编译后的内存镜像,是线程安全的(不可变)。
作为 Session 的工厂和 ConnectionProvider 的客户。SessionFactory 可以在进程或集群的级别上,
为那些事务之间可以重用的数据提供可选的二级缓存。

Session (org.hibernate.Session)
表示应用程序与持久储存层之间交互操作的一个单线程对象,此对象生存期很短。
其隐藏了 JDBC 连接,也是 Transaction 的工厂。它会持有一个针对持久化对象的必选(第一级)缓存,
在遍历对象图或者根据持久化标识查找对象时会用到。

Transaction (org.hibernate.Transaction)
(可选的)应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短。
它通过抽象将应用从底层具体的 JDBC、JTA 以及 CORBA 事务隔离开。某些情况下,
一个 Session 之内可能包含多个 Transaction 对象。
尽管是否使用该对象是可选的,但无论是使用底层的 API 还是使用 Transaction 对象,事务边界的开启与关闭是必需的。

(2)Annotation使用(注解)
Hibernate配置错误(javax.persistence.Cacheable)
出现错误:Caused by: java.lang.ClassNotFoundException: javax.persistence.Cacheable
原因: 错误在于javax.persistence.Cacheable是JPA2.0规范中的东西,需添加
hibernate-distribution-3.5.4-Final/lib/jpa/hibernate-jpa-2.0-api-1.0.0.Final.jar

测试程序:
实体类:
@Entity
public class Student {
private int id;
private String name;
private String className;

@Id
public int getId() { return id; }
}

@Entity 注明要持久化的实体类,并可以指定特定的表,如:
@Entity
@Table(name="student")

@Id 声明该持久化类对应表的主键,若想其自动生成,则需要添加ID生成策略:如,
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
生成的策略类型有:AUTO,TABLE,IDENTITY,SEQUENCE

组合主键:

  • 将组件类注解为@Embeddable,并将组件的属性注解为@Id
  • 将组件的属性注解为@EmbeddedId
  • 将类注解为@IdClass,并将该实体中所有属于主键的属性都注解为@Id

@IdClass方法中的主键类必须重写equal和hashCode方法,以保证唯一性;

@Column 设置生成表对应列的属性,包括字段长度,类型,列名,是否为空等等

(3)Hibernate流程:
-----配置:
Configuration cfg = new Configuration();
或Configuration cfg = new AnnotationConfiguration(); //使用Annotattion实现
调用其configure()方法配置相关配置文件
-----获得 SessionFactory
SessionFactory sessions = cfg.buildSessionFactory();
-----JDBC 连接
Session session = sessions.openSession();
-----存储对象
session.save(Object o);
-----关闭连接
session.close();

(4)日志文件的使用(log4j)
---首先要下载log4j的jar包,将其导入到项目中
---再下载sjf4j的jar包,下载后解压出来将slf4j-log4j12-1.6.1.jar和slf4j-api-1.6.1.jar
导入到项目中
---将log4j.properties文件放在src下,并打开选择其中要显示的日志信息,将不显示的信息注释即可
一般将log4j.logger.org.hibernate.SQL=debug信息显示出来,因为可以从中看到操纵表的语句,
方便调试。

(5)持久化类
--注意:必须实现一个默认的构造方法,即无参数的,可以给Hibernate动态调用生成对象
--以下情况必须实现equals方法和hashCode方法
-1-想把持久化类的实例放入set中
-2-想重用脱管实例(??)

--多态持久化需要为父类的每个子类都进行定义
即在配置文件中用 <subclass> 定义

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值