EJB3.0里实体bean的复合主键需要定义一个主键类。
部分代码如下:
// 主键类
@SuppressWarnings("serial")
public class OrderItemKey implements Serializable {
private Integer orderId;
private int itemId;
public Integer getOrderId() {
return orderId;
}
public void setOrderId(Integer orderId) {
this.orderId = orderId;
}
public int getItemId() {
return itemId;
}
public void setItemId(int itemId) {
this.itemId = itemId;
}
public int hashCode() {
return (((this.getOrderId() == null) ? 0 : this.getOrderId().hashCode())
^ ((int) this.getItemId()));
}
public boolean equals(Object otherOb) {
if (this == otherOb) {
return true;
}
if (!(otherOb instanceof OrderItemKey)) {
return false;
}
OrderItemKey other = (OrderItemKey) otherOb;
return (((this.getOrderId() == null) ? (other.getOrderId() == null)
: this.getOrderId()
.equals(other.getOrderId()))
&& (this.getItemId() == other.getItemId()));
}
public String toString() {
return "" + getOrderId() + "-" + getItemId();
}
}
// 实体类
@SuppressWarnings("serial")
@Entity
@Table(name="orderitem")
@IdClass(OrderItemKey.class) // 声明主键类
public class OrderItem implements Serializable {
private Integer orderId;
private int itemId;
private int quantity;
private VendorPart vendorPart;
private MyOrder order;
@Id
@Column(name="orderid",nullable=false,insertable=false,updatable=false)
public Integer getOrderId() {
return orderId;
}
public void setOrderId(Integer orderId) {
this.orderId = orderId;
}
@Id
@Column(name="itemid")
public int getItemId() {
return itemId;
}
public void setItemId(int itemId) {
this.itemId = itemId;
}
}
利用 find() 等查询该实体时也需要用主键类对象作为参数
如:
OrderItemKey itemKey = new OrderItemKey();
itemKey.setOrderId(1);
itemKey.setItemId(1);
OrderItem oi2 = em.find(OrderItem.class, itemKey);
分享到:
相关推荐
8. **复合主键(CompositePK)**:在某些情况下,实体Bean可能需要多个字段作为主键,这可以通过定义复合主键类并使用@Embeddable和@IdClass注解来实现。 9. **定时服务(TimerService)**:EJB 3.0提供了一个定时...
6. **实体bean(Entity Beans)**:代表数据库中的持久化对象,EJB3.0中实体bean通过JPA进行管理,可以是无主键的,也可以是基于单个字段的主键或复合主键。 **EJB3.0开发实例:** - **Session Bean**:通过`@...
2. **CompositePK** - 在ejb3.0中,实体bean可以使用复合主键(Composite Key)。`CompositePK`类可能表示这种复合主键的实现,它包含多个字段,每个字段都可能是主键的一部分。 3. **TimerService** - ejb3.0引入...
- **Web应用中使用EJB**: 介绍如何在Web应用中整合EJB 3.0,包括使用会话Bean、消息驱动Bean、依赖注入和实体Bean等。 - **框架设计**: 提供具体的案例分析,展示如何设计一个基于EJB 3.0的轻量级应用框架。 通过...
EJB 3.0支持多种主键策略,包括自动生成(@GeneratedValue)、单字段主键、复合主键(@EmbeddedId或@IdClass)等。 5. **关系映射**: EJB 3.0支持多种关系映射,如一对一(@OneToOne)、一对多(@OneToMany)、多...
EJB3.0提供了支持复合主键的机制,使得处理多个属性的唯一标识变得简单。 #### 2.4 `Interceptor` 拦截器是EJB3.0中的另一个强大功能,它们允许在方法调用前后插入自定义逻辑。`Interceptor`示例解释了如何创建...
EJB3.0支持复合主键,允许实体类使用多个属性作为其唯一标识。`CompositePK`类可能包含了这些属性,通过实现`Serializable`接口和`@Embeddable`注解,确保了复合主键的正确序列化和持久化。 3. **定时服务(Timer...
`@Id`注解定义主键字段,如果需要复合主键,可以使用`@IdClass`或`@EmbeddedId`。例如: ```java @Entity @Table(name = "USER_TABLE") public class User { @Id private String userId; // 其他属性和方法 } ``...
每个包含复合主键的实体bean需要在主键类上使用`@IdClass`注解。 3. **TimerService**:EJB 3.0引入了定时器服务,允许开发者安排任务在将来某个时间执行。`TimerService`接口提供了创建定时任务的方法,这些任务...
### JBoss EJB3.0 教程知识点详解 #### 一、教程适用人群与目的 - **适用人群**:本书适用于对Java EE技术有一定了解的开发者,特别是那些希望深入学习并掌握JBoss环境下EJB3.0技术的读者。 - **教程目的**:旨在...
8. **复合主键**:介绍了如何使用复合主键来唯一标识实体Bean。 9. **Web服务**:包括如何创建和调用Web服务,以及使用Java和ASP进行调用的方法。 #### 四、总结 EJB 3.0 的引入标志着企业级Java开发进入了一个新...
- EJB3.0 支持在会话 Bean 中注入其他组件。 6. **定时服务 (TIMER SERVICE)**: - 定时服务允许 Bean 在指定的时间间隔后执行某个方法。 - 适用于定时任务的实现。 #### 五、消息驱动 BEAN (MESSAGE DRIVEN ...