Order 类:
import java.io.Serializable;
import java.util.HashSet;
import java.util.Date;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@Table(name = "Orders")
public class Order implements Serializable {
private static final long serialVersionUID = 4970325922198249712L;
private Integer orderid;
private Float amount;
private Set<OrderItem> orderItems = new HashSet<OrderItem>();
private Date createdate;
@Id
@GeneratedValue
public Integer getOrderid() {
return orderid;
}
public void setOrderid(Integer orderid) {
this.orderid = orderid;
}
public Float getAmount() {
return amount;
}
public void setAmount(Float amount) {
this.amount = amount;
}
// ①Order中保留OrderItem集合 关联OrderItem中的order属性
// ②级联方式为全部级联
// ③Many的一方延迟加载 fetch = FetchType.LAZY
// ④OrderBy 指定排序字段和方式
@OneToMany(mappedBy="order",cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@OrderBy(value = "id ASC")
public Set<OrderItem> getOrderItems() {
return orderItems;
}
public void setOrderItems(Set<OrderItem> orderItems) {
this.orderItems = orderItems;
}
@Temporal(value=TemporalType.TIMESTAMP)
public Date getCreatedate() {
return createdate;
}
public void setCreatedate(Date createdate) {
this.createdate = createdate;
}
public void addOrderItem(OrderItem orderitem) {
if (!this.orderItems.contains(orderitem)) {
this.orderItems.add(orderitem);
orderitem.setOrder(this);
}
}
public void removeOrderItem(OrderItem orderitem) {
if (this.orderItems.contains(orderitem)) {
orderitem.setOrder(null);
this.orderItems.remove(orderitem);
}
}
/**
* 返回对象的散列代码值。该实现根据此对象
* 中 orderid 字段计算散列代码值。
* @return 此对象的散列代码值。
*/
@Override
public int hashCode() {
int hash = 0;
hash += (this.orderid != null ? this.orderid.hashCode() : 0);
return hash;
}
/**
* 确定其他对象是否等于此 Order。当且仅当
* 参数不为 null 且该参数是具有与此对象相同 orderid 字段值的 Order 对象时,
* 结果才为 <code>true</code>。
* @param 对象,要比较的引用对象
* 如果此对象与参数相同,则 @return <code>true</code>;
* 否则为 <code>false</code>。
*/
@Override
public boolean equals(Object object) {
if (!(object instanceof Order)) {
return false;
}
Order other = (Order)object;
if (this.orderid != other.orderid && (this.orderid == null || !this.orderid.equals(other.orderid))) return false;
return true;
}
/**
* 返回对象的字符串表示法。该实现根据 orderid 字段
* 构造此表示法。
* @return 对象的字符串表示法。
*/
@Override
public String toString() {
return this.getClass().getName()+ "[orderid=" + orderid + "]";
}
}
OrderItem 类:
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@Entity
public class OrderItem implements Serializable {
private static final long serialVersionUID = -1166337687856636179L;
private Integer id;
private String productname;
private Float price;
private Order order;
public OrderItem() {}
public OrderItem(String productname, Float price) {
this.productname = productname;
this.price = price;
}
@Id
@GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(length=100, nullable=false)
public String getProductname() {
return productname;
}
public void setProductname(String productname) {
this.productname = productname;
}
public Float getPrice() {
return price;
}
public void setPrice(Float price) {
this.price = price;
}
// ①OrderItem保留一个Order 映射OrderItem表中order_id外键字段
// ②级联方式为级联刷新
// ③optional=false不可选,必须存在
@ManyToOne(cascade=CascadeType.REFRESH, optional=false)
@JoinColumn(name = "order_id")
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
/**
* 返回对象的散列代码值。该实现根据此对象
* 中 id 字段计算散列代码值。
* @return 此对象的散列代码值。
*/
@Override
public int hashCode() {
int hash = 0;
hash += (this.id != null ? this.id.hashCode() : super.hashCode());
return hash;
}
/**
* 确定其他对象是否等于此 OrderItem。当且仅当
* 参数不为 null 且该参数是具有与此对象相同 id 字段值的 OrderItem 对象时,
* 结果才为 <code>true</code>。
* @param 对象,要比较的引用对象
* 如果此对象与参数相同,则 @return <code>true</code>;
* 否则为 <code>false</code>。
*/
@Override
public boolean equals(Object object) {
if (!(object instanceof OrderItem)) {
return false;
}
OrderItem other = (OrderItem)object;
if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) return false;
return true;
}
/**
* 返回对象的字符串表示法。该实现根据 id 字段
* 构造此表示法。
* @return 对象的字符串表示法。
*/
@Override
public String toString() {
return this.getClass().getName()+ "[id=" + id + "]";
}
}
分享到:
相关推荐
在EJB中,`OneToMany`关系是一种常见的实体关系映射,它表示一个实体类与另一个实体类之间的一对多关联。 ### 1. EJB概述 EJB是Java EE(Java Platform, Enterprise Edition)的一部分,它提供了一种标准的方式来...
本知识点将深入探讨EJB3中的`@OneToMany`关系映射,以及与之相关的工具使用。 `@OneToMany`是JPA中的一个注解,它用于表示一对多的关系,即一个实体类可以关联多个其他实体类实例。这种关系在数据库中通常对应一个...
EJB3支持一对多(@OneToMany)、多对一(@ManyToOne)、一对一(@OneToOne)和多对多(@ManyToMany)的关系映射,通过注解来定义实体之间的关联。 9. **懒加载和即时加载** EJB3支持懒加载和即时加载策略,控制...
3. `@ManyToOne`:多对一关系,多个实体对应另一个实体的单一实例。 4. `@ManyToMany`:多对多关系,多个实体可以关联多个其他实体,通常需要一个中间表来存储关系。 在实际应用中,JPA的关联映射不仅可以简化对象...
首先,理解EJB实体Bean的含义至关重要。实体Bean代表持久化的业务对象,它们与数据库中的记录相对应,负责存储和检索数据。EJB 3.0引入了注解驱动的开发方式,大大简化了实体Bean的编程模型,使得开发者不再需要编写...
同时,EJB3还支持类的继承映射,使得复杂的对象结构能够有效地映射到数据库中。 **五、持久化实体管理器(EntityManager)** EntityManager是JPA的主要接口,用于操作实体对象,包括查询、保存、更新和删除。通过`@...
在学习和实践中,可以通过以下步骤创建一个单表映射的EJB实体Bean: 1. 定义实体类,使用`@Entity`、`@Table`等注解。 2. 注解属性以匹配数据库表的列。 3. 创建`EntityManager`实例,用于操作Bean。 4. 使用`...
15. **@SecondaryTable** - 用于指定一个实体映射到多个表时,除了主表之外的辅助表。 #### 三、配置实体的示例 - 使用 `@Entity` 和 `@Table` 批注定义实体和数据库表的映射关系。 - 使用 `@Id` 和 `@...
EJB(Enterprise JavaBeans)是Java EE平台的核心组件之一,用于构建可扩展、可靠且安全的企业级应用程序。而JPA则是Java EE中用于对象关系映射(ORM)的标准API,它简化了在Java应用中管理数据库持久化数据的过程。...
EJB3引入了注解驱动的实体管理,使得无需编写大量的接口和实现代码,可以通过`@Entity`定义实体类,`@Table`指定映射的数据库表,`@Id`标记主键字段。 - **会话Bean(Session Bean)**:提供业务逻辑服务,可以是...
总结来说,"EJB相关jar包(有persistence)"提供的`ejb3-persistence.jar`是一个关键的库,它包含了EJB3中JPA的实现,让开发者能够方便地进行对象-关系映射,简化了数据库操作,提升了企业级应用的开发效率。...
9. **实体关系图(ERD)**:EJB3.0规范支持通过注解定义复杂的关系,如一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)、多对多(@ManyToMany)等。 10. **异步处理(Asynchronous Processing)*...
通过`@Entity`注解定义实体类,`@Table`指定映射的数据库表,`@Id`定义主键,可以轻松实现对象关系映射。同时,`@GeneratedValue`用于自动生成主键,`@OneToMany`、`@ManyToOne`、`@ManyToMany`和`@OneToOne`用于...
### EJB3 使用说明中文版知识点总结 #### 一、EJB3 概念与应用场景 **企业 Java Beans (EJB)** 是一种基于 Java 的中间件技术,它为开发复杂的企业级应用程序提供了一种标准化的方法。EJB3 相比于早期版本有了很大...
JPA通过注解来描述实体间的关联关系,如一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)关系。此外,还支持延迟加载(Lazy Loading)和即时加载(Eager Loading)策略。 ...
- **关系映射**:JPA提供了多种方式来处理关系数据库中的关联,如`@OneToOne`, `@OneToMany`, `@ManyToOne`, `@ManyToMany`。 - **查询语言**:JPA引入了JPQL(Java Persistence Query Language),类似于SQL,...
7. **实体关系映射**:在教程中,你将学习如何使用JBuilder 2007配置实体Bean之间的关系,如一对一、一对多、多对多关系,并使用`@OneToOne`、`@OneToMany`、`@ManyToOne`和`@ManyToMany`等注解。 8. **事务管理**...