Hibernate Annotation文档整理(一)

 

Setting up an annotations project

  • HibernateUtil类(Annotation方式)
public class HibernateUtil {
private static final SessionFactory sessionFactory;
    static {
        try {
            sessionFactory = new AnnotationConfiguration()
                    .configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Log exception!
            throw new ExceptionInInitializerError(ex);
        }
    }
    public static Session getSession()
            throws HibernateException {
        return sessionFactory.openSession();
    }
}
 
  • 需要添加hibernate.cfg.xml配置文件,内容如:

     

    <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
      <session-factory>
        <mapping package="test.animals"/>
        <mapping class="test.Flight"/>
        <mapping class="test.Sky"/>
        <mapping class="test.Person"/>
        <mapping class="test.animals.Dog"/>
    
        <mapping resource="test/animals/orm.xml"/>
      </session-factory>
    </hibernate-configuration>
     

     


    hibernate 特定的属性

Property 
描述 
hibernate.cache.default_cache_concurrency_strategy
当使用注解@Cacheable @Cache时,用来给的默认org.hibernate.annotations.CacheConcurrencyStrategy设置名称,@Cache(strategy="..") 可以覆盖默认设置。 
hibernate.id.new_generator_mappings 
值为true或者false,这个设置表示是否新建的IdentifierGenerator实现类的生成策略为AUTO、Table和Sequence。默认为false,以保持向后兼容性。

我们建议所有新项目使用hibernate.id.new_generator_mappings= true,新的生成器是更有效率和更密切的JPA规范语义。然而,他们不向后兼容现有的数据库(如果ID生成一个序列或表)。

Mapping Entities

Marking a POJO as persistent entity

 

 

@Entity
public class Flight implements Serializable {
    Long id;

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

    public void setId(Long id) { this.id = id; }
}
public class Flight implements Serializable {
 

 

Defining the table

 

@Table元素包含一个schema和catalog属性,如果他们需要被定义。

你还可以使用@ UniqueConstraint 给表定义唯一约束(建议使用@Column.unique方法。)

 

@Table(name="tbl_sky",
    uniqueConstraints = {@UniqueConstraint(columnNames={"month", "day"})}
)
 

 

通过@Version设置乐观锁

 

@Entity
public class Flight implements Serializable {
    ...
    @Version
    @Column(name="OPTLOCK")
    public Integer getVersion() { ... }
}
 

 

version这个属性会被映射成为乐观锁字段,实体管理器会通过它检测到有冲突的更新。为了防止丢失更新,可以设置最晚提交生效策略(last-commit-wins strategy)。

version字段可以是数字或者时间戳,Hibernate支持自定义的或者适当的实现UserVersionType的类型。

Mapping simple properties

Declaring basic property mappings(声明基本属性映射)

实体中任何一个非静态的、非暂时性属性都认为是持久化字段,除非使用@Transient注解。

属性不加注解相当于加@Basic,@Basic允许声明加载策略(FetchType)。

 

public transient int counter; //transient property

private String firstname; //persistent property

@Transient
String getLengthInMeter() { ... } //transient property

String getName() {... } // persistent property

@Basic
int getLength() { ... } // persistent property

@Basic(fetch = FetchType.LAZY)
String getDetailedComment() { ... } // persistent property

@Temporal(TemporalType.TIME)
java.util.Date getDepartureTime() { ... } // persistent property

@Enumerated(EnumType.STRING)
Starred getNote() { ... } //enum persisted as String in database
 

 

在普通的Java API中,时间精度是没有定义的。当处理时间数据时,你可能需要在数据库中描述期望的时间精度。

时间数据可以有DATE、TIME、TIMESTAMP的精度,通过@Temporal注解可以微调。

@Lob标识属性应该持久化为Blob或者Clob类型,这决定于属性的类型。
java.sql.Clob、Character[]、char[] 和 String会持久化成Clob。
java.sql.Blob、Byte[]、byte[]和Serializable会被持久化成Blob。

 

@Lob
public String getFullText() {
    return fullText;
}

@Lob
public byte[] getFullCode() {
    return fullCode;
}
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前言 1. 翻译说明 2. 版权声明 前言 1. 创建一个注解项目 1.1. 系统需求 1.2. 系统配置 2. 实体Bean 2.1. 简介 2.2. 用EJB3注解进行映射 2.2.1. 声明实体bean 2.2.1.1. 定义表(Table) 2.2.1.2. 乐观锁定版本控制 2.2.2. 映射简单属性 2.2.2.1. 声明基本的属性映射 2.2.2.2. 声明列属性 2.2.2.3. 嵌入式对象(又名组件) 2.2.2.4. 无注解之属性的默认值 2.2.. 映射主键属性 2.2.4. 映射继承关系 2.2.4.1. 每个类一张表 2.2.4.2. 每个类层次结构一张表 2.2.4.3. 连接的子类 2.2.4.4. 从父类继承的属性 2.2.5. 映射实体Bean的关联关系 2.2.5.1. 一对一(One-to-one) 2.2.5.2. 多对一(Many-to-one) 2.2.5.3. 集合类型 2.2.5.4. 用cascading实现传播性持久化(Transitive persistence) 2.2.5.5. 关联关系获取 2.2.6. 映射复合主键与外键 2.2.7. 映射二级表(secondary tables) 2.3. 映射查询 2.3.1. 映射EJBQL/HQL查询 2.3.2. 映射本地化查询 2.4. Hibernate独有的注解扩展 2.4.1. 实体 2.4.2. 标识符 2.4.3. 属性 2.4.3.1. 访问类型 2.4.3.2. 公式 2.4.3.3. 类型 2.4.3.4. 索引 2.4.3.5. @Parent 2.4.3.6. 生成的属性 2.4.4. 继承 2.4.5. 关于单个关联关系的注解 2.4.5.1. 延迟选项和获取模式 2.4.6. 关于集合类型的注解 2.4.6.1. 参数注解 2.4.6.2. 更多的集合类型 2.4.7. 缓存 2.4.8. 过滤器 2.4.9. 查询 3. 通过XML覆写元数据 3.1. 原则 3.1.1. 全局级别的元数据 3.1.2. 实体级别的元数据 3.1.3. 属性级别的元数据 3.1.4. 关联级别的元数据 4. Hibernate验证器 4.1. 约束 4.1.1. 什么是约束? 4.1.2. 内建约束 4.1.3. 错误信息 4.1.4. 编写你自己的约束 4.1.5. 注解你的领域模型 4.2. 使用验证器框架 4.2.1. 数据库schema层次验证 4.2.2. Hibernate基于事件的验证 4.2.3. 程序级验证 4.2.4. 验证信息 5. Hibernate与Lucene集成 5.1. 使用Lucene为实体建立索引 5.1.1. 注解领域模型 5.1.2. 启用自动索引 A. 术语表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值