1. 实体关系
1.1 单向One-to-One (Customer 1-1 Address)
Public class Customer implements Serializable {
private Address homeAddress;
@OneToOne(cascade={CascadeType.ALL}) //cascade可以不写
@JoinColumn(name="ADRDRESS_ID") //JoinColumn可以不写
或者使用@PrimaryKeyJoinColumn来代替上一行
public Address getAddress() { return homeAddress; }
public void setAddress(Address address) { this.homeAddress = address; }
}
1.2 双向One-to-One (Customer 1-1 CreditCard)
Public class Customer implements Serializable {
private CreditCard creditCard;
@OneToOne(cascade={CascadeType.ALL}) //cascade可以不写
@JoinColumn(name="CREDIT_CARD_ID") //JoinColumn可以不写
public CreditCard getCreditCard() { return creditCard; }
public void setCreditCard(CreditCard creditCard) { this.creditCard = creditCard; }
}
Public class CreditCard implements Serializable {
private Customer customer;
@OneToOne(mappedBy="creditCard")
public Customer getCustomer() { return customer; }
public void setCustomer(Customer customer) { this.customer = customer; }
}
创建实例
Customer cust = new Customer();
CreditCard card = new CreditCard();
cust.setCreditCard(card);
card.setCustomer(cust);
em.persist(cust);
删除实例
Customer cust = em.find(Customer.class, id);
em.remove(cust.getCreditCard());
cust.setCreditCard(null);
1.3 单向One-to-Many (Customer 1-N Phone)
Public class Customer implements Serializable {
private Collection<Phone> phoneNumbers = new ArrayList<Phone>();
@OneToMany(cascade={CascadeType.ALL}) //cascade可以不写
@JoinColumn(name="CUSTOMER_ID") //JoinColumn可以不写
public Collection<Phone> getPhoneNumbers() {return phoneNumbers;}
public void setPhoneNumbers(Collection<Phone> phoneNumbers) {this.phoneNumbers = phoneNumbers;}
}
另外可以使用关系表映射
Public class Customer implements Serializable {
private Collection<Phone> phoneNumbers = new ArrayList<Phone>();
@OneToMany(cascade={CascadeType.ALL}) //cascade可以不写
@JoinTable(name="CUSTOMER_PHONE",
2.8 Native SQL
String sqlstr = "SELECT p.phone_PK, p.phone_number FROM Phone p";
em.createNativeQuery(sqlstr, Phone.class);
2.9 具名查询
预定义好EJB QL或者Native SQL
@NamedQueries(
@NamedQuery(name="getCustomer", query="SELECT c FROM Customer where c.firstName=?1"),
@NamedQuery(name="findCustomer", query="SELECT c FROM Customer")
)
em.createNamedQuery("getCustomer");
query.setParameter(1, "Charles");
3. 回调和监听器
3.1 回调
PrePersist, PostPersist, PostLoad, PreUpdate, PostUpdate, PreRemove, PostRemove
@PrePersist void beforeInsert() {}
定义一系列方法,可以在执行具体的操作之前或者之后,加入相应的方法
3.2 监听器
如果我们定义了一个Class方法,其中有很多PrePersist之类的方法,那么在执行Entity的时候,
我们可以注册成Listeners,以实现其中的调用方法,主要是拦截Entity生命周期的事件
@Entity
@EntityListeners({TitanAuditLogger.class, EntityJmxNotifier.class})
public class Cabin {}
在Cabin执行Persist操作时,相应TitanAuditLogger中的方法就会被调用
子类能继承基类的监听器,如果两者都定义,那么子类都会用到
4. Session Bean
4.1 两种调用方式
1. call-by-value: 远程接口,无论客户端是在同一JVM还是远程,EJB容器都对参数和返回值进行值拷贝
2. call-by-reference: 本地接口,不会值拷贝
分享到:
相关推荐
Enterprise JavaBean 3.0 中文版
Enterprise JavaBean 3.0 一个经典案例
This book is about Enterprise JavaBeans 3.0, the latest version of the Enterprise JavaBeans specification, and its counterpart, the new Java Persistence specification. Just as the Java platform has ...
这是第二部分,因为太大了,所以分了两个部分。
Enterprise JavaBeans 3.0 中文版 (第5版) .pdf 下载.rar
完是完整了就是不知道是不是真的自己看着办吧
Enterprise JavaBean基础
介绍 javaBean的 OReilly的书
enterprise javabean cmp资料
英文enterprise,javabean资料
EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。
我们也想过很多办法解决这个问题,包括用MyEclipse连接数据库生成JavaBean,但多多少少还是会有一些不尽人意的地方,包括表和表字段的comment总是无法生成,而且还会生成很多无用的注释代码,让代码看起来一点都不...
会话bean 会话bean通常代表业务流程里面的操作,譬如“处理订单”。可根据对话状态的保持性,即有状态和无状态对会话bean进行分类。 无状态的会话 bean没有内部状态。它们不跟踪记录从一个方法调用传递到另一个...
从此,JavaBean就可以扩展为一个java web 应用的标准部件,并且JavaBean部件框架已经扩展为企业版的 Bean(EJB)。 JavaBean 和 Server Bean(通常称为 Enterprise JavaBean (EJB))有一些基本相同之处。它们都是...
2022年JavaBean(EJB) 3.0 全新体验Java教程.docx
NULL 博文链接:https://vipbooks.iteye.com/blog/2219977
本教程介绍了 Enterprise JavaBean 技术,特别关注于在分布式计算方案中 Enterprise JavaBean 组件的角色、体系结构、扩展 API 以及使用 EJB 技术的基本知识。
EJB教程.doc 对于企业级的java bean开发很有帮助 作为参考资料 绝对值の!!
学习EJB时编写的小例子,每个例子代表一个知识点。较好的自学材料。