Hibernate annotation detail

本文详细介绍了如何声明实体Bean,并将其映射到数据库表中,同时解释了如何定义表、映射列属性、透明化以及映射日期与时间类型。通过示例代码,深入探讨了实体Bean中的属性映射、获取策略和日期时间类型的指定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.声明实体bean

每一个持久化POJO类都是一个实体bean,这可以通过在类的定义中使用@Entity注解来进行声明:

@Entity
public class Flight implements Serializable {
    Long id;

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

    public void setId(Long id) { this.id = id; }
}
通过@Entity注解将一个类声明为一个实体bean(即一个持久化POJO类)
2. 定义表(Table)

@Table是类一级的注解,通过@Table注解可以为实体bean映射指定表(table),目录(catalog)和schema的名字.如果没有定义@Table,那么系统自动使用默认值:实体的短类名(不附带包名).

@Entity
@Table(name="tbl_sky")
public class Sky implements Serializable {
...
            

@Table元素包括了一个schema和一个 catalog属性,如果需要可以指定相应的值.


3.声明列属性

使用 @Column 注解可将属性映射到列.使用该注解来覆盖默认值(关于默认值请参考EJB3规范).在属性级使用该注解的方式如下:

  • 不进行注解

  • @Basic一起使用

  • @Version一起使用

  • @Lob一起使用

  • @Temporal一起使用

  • @org.hibernate.annotations.CollectionOfElements一起使用 (只针对Hibernate )

@Entity
public class Flight implements Serializable {
...
@Column(updatable = false, name = "flight_name", nullable = false, length=50)
public String getName() { ... }
            

在上面这个例子中,name属性映射到flight_name列.该字段不允许为空,长度为50,并且是不可更新的(也就是属性值是不变的).


4.透明化

实体bean中所有的非static非transient的属性都可以被持久化,除非你将其注解为@Transient.所有没有定义注解的属性等价于在其上面添加了@Basic注解.通过@Basic注解可以声明属性的获取策略(fetch strategy):

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
上面这个例子中,counter是一个transient的字段,lengthInMeter的getter方法被注解为@Transient, entity manager将忽略这些字段和属性.


5. 映射日期与时间类型,指定时间精度

Annotation:@Temporal(参数) 参数有3种 只显示时间,只显示日期,时间日期都显示

//@Temporal(TemporalType.DATE) 只显示日期

//@Temporal(TemporalType.TIME) 只显示时间

//@Temporal(TemporalType.TIMESTAMP) 显示日期与时间



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值