`
落花虽有意
  • 浏览: 185268 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

EJB3.0里实体bean的复合主键

阅读更多

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);
 

 

 

 

 

分享到:
评论

相关推荐

    EJB3.0实例教程及源代码

    8. **复合主键(CompositePK)**:在某些情况下,实体Bean可能需要多个字段作为主键,这可以通过定义复合主键类并使用@Embeddable和@IdClass注解来实现。 9. **定时服务(TimerService)**:EJB 3.0提供了一个定时...

    EJB3.0入门图文教程

    6. **实体bean(Entity Beans)**:代表数据库中的持久化对象,EJB3.0中实体bean通过JPA进行管理,可以是无主键的,也可以是基于单个字段的主键或复合主键。 **EJB3.0开发实例:** - **Session Bean**:通过`@...

    ejb3.0实例教程源码

    2. **CompositePK** - 在ejb3.0中,实体bean可以使用复合主键(Composite Key)。`CompositePK`类可能表示这种复合主键的实现,它包含多个字段,每个字段都可能是主键的一部分。 3. **TimerService** - ejb3.0引入...

    EJB3.0

    - **Web应用中使用EJB**: 介绍如何在Web应用中整合EJB 3.0,包括使用会话Bean、消息驱动Bean、依赖注入和实体Bean等。 - **框架设计**: 提供具体的案例分析,展示如何设计一个基于EJB 3.0的轻量级应用框架。 通过...

    EJB 3.0 持久性 API

    EJB 3.0支持多种主键策略,包括自动生成(@GeneratedValue)、单字段主键、复合主键(@EmbeddedId或@IdClass)等。 5. **关系映射**: EJB 3.0支持多种关系映射,如一对一(@OneToOne)、一对多(@OneToMany)、多...

    EJB3.0实例教程 源代码

    EJB3.0提供了支持复合主键的机制,使得处理多个属性的唯一标识变得简单。 #### 2.4 `Interceptor` 拦截器是EJB3.0中的另一个强大功能,它们允许在方法调用前后插入自定义逻辑。`Interceptor`示例解释了如何创建...

    最新EJB3.0实例教程的实例代码

    EJB3.0支持复合主键,允许实体类使用多个属性作为其唯一标识。`CompositePK`类可能包含了这些属性,通过实现`Serializable`接口和`@Embeddable`注解,确保了复合主键的正确序列化和持久化。 3. **定时服务(Timer...

    EJB3.0开发Entity.rar

    `@Id`注解定义主键字段,如果需要复合主键,可以使用`@IdClass`或`@EmbeddedId`。例如: ```java @Entity @Table(name = "USER_TABLE") public class User { @Id private String userId; // 其他属性和方法 } ``...

    《EJB3.0实例子教程》愿代码

    每个包含复合主键的实体bean需要在主键类上使用`@IdClass`注解。 3. **TimerService**:EJB 3.0引入了定时器服务,允许开发者安排任务在将来某个时间执行。`TimerService`接口提供了创建定时任务的方法,这些任务...

    Jboss EJB3.0教程

    ### JBoss EJB3.0 教程知识点详解 #### 一、教程适用人群与目的 - **适用人群**:本书适用于对Java EE技术有一定了解的开发者,特别是那些希望深入学习并掌握JBoss环境下EJB3.0技术的读者。 - **教程目的**:旨在...

    ejb3.0

    8. **复合主键**:介绍了如何使用复合主键来唯一标识实体Bean。 9. **Web服务**:包括如何创建和调用Web服务,以及使用Java和ASP进行调用的方法。 #### 四、总结 EJB 3.0 的引入标志着企业级Java开发进入了一个新...

    EJB3.0的学习教材

    - EJB3.0 支持在会话 Bean 中注入其他组件。 6. **定时服务 (TIMER SERVICE)**: - 定时服务允许 Bean 在指定的时间间隔后执行某个方法。 - 适用于定时任务的实现。 #### 五、消息驱动 BEAN (MESSAGE DRIVEN ...

Global site tag (gtag.js) - Google Analytics