EJB3.0注解详解:关键属性与主键生成策略
在EJB 3.0中,注解是一种强大的工具,用于简化对象关系映射(ORM)和组件之间的交互。本文主要介绍了几个关键的注解,它们在Java Enterprise Edition (JEE) 应用程序开发中扮演着重要角色。 1. **@Id**:这个注解用于标记一个属性为实体类的唯一标识符(primary key)。它告诉容器该属性应被视为数据库中的主键,并且通常会自动进行数据管理和持久化。 2. **@GeneratedValue(strategy=GenerationType.IDENTITY)**:这个注解用于指定主键的生成策略。`GenerationType.IDENTITY`表示数据库将自动为新创建的对象生成唯一的ID,如在SQL Server中,这通常对应于内建的自动递增序列。 3. **@Entity**:这是一个元注解,用于声明一个类是Java Persistence API (JPA) 实体,这意味着它可以与数据库进行持久化操作。一个类被声明为@Entity后,其属性将映射到数据库表中。 4. **@Table(name="Order")**:这个注解用于指定实体类关联的数据库表名,例如这里定义了一个名为"Order"的表。 5. **@Column(name="Name", nullable=false, length=32)**:列注解用于描述数据库表中的某个字段,如Name字段是非空的字符串,长度为32字符。 6. **@Lob** 和 **@Basic(fetch=FetchType.LAZY)**:Lob(Large Object)表示一个字段可能包含大量数据,比如文本或二进制数据。@Basic注解用于指示该字段在查询时默认为懒加载(lazy loading),只有在真正需要时才会从数据库加载。 7. **@PersistenceContextSessionBean**:这个注解用于声明一个持久上下文,它是一个线程绑定的EntityManager实例,可以方便地管理整个事务期间的实体对象。 8. **@OneToMany** 和 **@ManyToOne**:这些注解用于描述一对多(OneToMany)和一对一(ManyToOne)的关系。CascadeType.ALL指定当父实体更新时,子实体也会自动更新;FetchType.LAZY则控制了懒加载的策略。 9. **@Temporal(value=TemporalType.DATE)**:这个注解用于标记日期或时间类型的属性,TemporalType.DATE表示存储的是日期值。 10. **@OneToOne**:用于描述一对一关系,optional=true表示该关联不是强制性的,CascadeType.ALL用于指定在特定情况下(如删除父实体)同步更新或删除子实体。 11. **@ManyToMany**:表示多对多关系,mappedBy属性用于指定哪个实体类负责维护关系的一方,而@JoinTable注解用于定义关联表的结构。 这些注解是EJB 3.0中用于实现ORM的强大工具,通过它们,开发者可以简洁地定义类的结构、数据库表的映射以及事务处理,从而提高代码的可读性和维护性。理解并灵活运用这些注解对于编写高效、可扩展的JEE应用程序至关重要。
1. @Id 显示声明属性为标识符
2. @GeneratedValue(strategy=GenerationType.IDENTITY) 表示主键是自动生成策略,strategy 有很多
选择 IDENTITY 是针对 SQLSERVER 等数据的。一般该注释和 @Id 合用
3. @Entity 任何 Entity Bean 都要有次注释
4. @Table(name = "Order") 类和 Table 对应声明
5. @Column(name = "Name",nullable=false,length=32) 和 ORM 产品的 Mapping file 一样,声明数据 库字段和类属性对应关系,其他选项是一样的,看看就知道了。
6. @Lob
@Basic(fetch=FetchType.LAZY) 声明字段为 Clob 或 Blob 类型,并且要 Lazy 加载。
7. @PersistenceContext 往 SessionBean 中注入 EntityManager 对象
8. @OneToMany(mappedBy="order",cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@OrderBy(value = "id ASC")
一对多声明,和 ORM 产品声明类似,一看就明白了。
@ManyToOne(cascade=CascadeType.REFRESH,optional=false)
@JoinColumn(name = "order_id")
声明为双向关联
9. @Temporal(value=TemporalType.DATE) 做日期类型转换。
10.@OneToOne(optional = true,cascade = CascadeType.ALL, mappedBy = "person")
一对一关联声明
@OneToOne(optional = false, cascade = CascadeType.REFRESH)
@JoinColumn(name = "Person_ID", referencedColumnName = "personid",unique = true)
声明为双向关联
11.@ManyToMany(mappedBy = "students") 多对多关联声明。
@ManyToMany(cascade = CascadeType.PERSIST, fetch =FetchType.LAZY)
@JoinTable(name = "Teacher_Student",
joinColumns = {@JoinColumn(name = "Teacher_ID", referencedColumnName = "teacherid")},
inverseJoinColumns = {@JoinColumn(name = "Student_ID", referencedColumnName = "studentid")})
多对多关联一般都有个关联表,是这样声明的!
下载后可阅读完整内容,剩余1页未读,立即下载
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- WebLogic集群配置与管理实战指南
- AIX5.3上安装Weblogic 9.2详细步骤
- 面向对象编程模拟试题详解与解析
- Flex+FMS2.0中文教程:开发流媒体应用的实践指南
- PID调节深入解析:从入门到精通
- 数字水印技术:保护版权的新防线
- 8位数码管显示24小时制数字电子钟程序设计
- Mhdd免费版详细使用教程:硬盘检测与坏道屏蔽
- 操作系统期末复习指南:进程、线程与系统调用详解
- Cognos8性能优化指南:软件参数与报表设计调优
- Cognos8开发入门:从Transformer到ReportStudio
- Cisco 6509交换机配置全面指南
- C#入门:XML基础教程与实例解析
- Matlab振动分析详解:从单自由度到6自由度模型
- Eclipse JDT中的ASTParser详解与核心类介绍
- Java程序员必备资源网站大全