摘要:
在前面的所有的实体Bean的例子中,我们所用的主键都是Id,而且都是由容器自动生成的。如:@Id(generate = GeneratorType.AUTO)public int getId(){ return id;}事实上,主键可以是任意的java基本类型、或者是基本类型的包装类,如Integer、String类型、或者是带字段或属性的主键类。注意,如果这样使用主键,你需要将主键的注释中的生成规则改为NONE。就是由程序生成主键值。主键类必须实现hashCode和equals方法。这个例子前面举例过,就是一个存储学生信息的实体bean,在那个例子中,使用Name类作为属性,并且以Id作为主 阅读全文
posted @ 2004-12-13 09:03
反正我信了
阅读(239)
评论(0)
推荐(0)
摘要:
这个和单表策略差不多,唯一不同就是在存存储的时候规定每一个实体bean映射到独立的一张表上。如:@Entity@Inheritance(strategy = InheritanceType.JOINED, discriminatorType = DiscriminatorType.STRING)@DiscriminatorColumn(name = "P_TYPE", nullable = true)在这个策略下,每个实体Bean也是映射成各自独立的一张表,但是和每类一表策略不同的是,子实体bean的映射的表中只有新增的属性。子实体bean通过联合父表得到数据。@Inher 阅读全文
posted @ 2004-12-13 09:01
反正我信了
阅读(140)
评论(0)
推荐(0)
摘要:
这个和单表策略差不多,唯一不同就是在存存储的时候规定每一个实体bean映射到独立的一张表上。如:@Entity@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS, discriminatorType = DiscriminatorType.STRING)@DiscriminatorColumn(name = "P_TYPE", nullable = true)这个例子主要有以下几个文件,这个例子主要实现了Person和Man、Woman之间的继承关系,这个例子和上一个例子没多大差别,就是在实体Bean注释的时候将I 阅读全文
posted @ 2004-12-13 09:00
反正我信了
阅读(142)
评论(0)
推荐(0)
摘要:
在EJB3.0中,实体Bean可以实现继承关系。比如有个Person的实体bean,它有姓名和性别两个属性。上帝和女娲造人的时候,造出两种人:Man和Woman。Man和Woman都是实体Bean,而且他们都继承Person。单一表策略就是副实体和子实体的数据都存放在一张表中,同时指定一列用来区别这些实体。如:@Entity@Inheritance(strategy = InheritanceType.SINGLE_TABLE, discriminatorType = DiscriminatorType.STRING)@DiscriminatorColumn(name = "P_TY 阅读全文
posted @ 2004-12-13 08:58
反正我信了
阅读(183)
评论(0)
推荐(0)
摘要:
在前面的例子中,我们演示了一对多和多对一的例子,在本章将演示多对多和一对一的关系。学生和老师就是多对多的关系。一个学生有多个老师,一个老师教多个学生。学生和档案就是一对一的关系(不知道国外的学生有没有档案?)。为了实现多对多的关系,数据库中需要关联表,用以在两个实体间建立关联。JBoss可以自动生成关联表,你也可以@AssociationTable来指定关联表的信息。如:@ManyToMany(cascade = {CascadeType.CREATE, CascadeType.MERGE}, fetch = FetchType.EAGER, isInverse = true)@Associa 阅读全文
posted @ 2004-12-13 08:56
反正我信了
阅读(284)
评论(0)
推荐(0)
摘要:
在前面的例子中,我们每一个实体Bean只映射到数据库中的一张表上。事实上,一个实体Bean可以映射到多张表上。在一些需要字典表的项目上会经常用到,象以前我做过的项目,使用到很多国标规定的数据表。在我们下面这个例子中,性别作为一个字典表存在,学生这个实体将映射到学生信息表、性别表这两个表。从表可以使用@SecondaryTable来注释:@Target({TYPE}) @Retention(RUNTIME)public @interface SecondaryTable {String name();String catalog() default "";String sch 阅读全文
posted @ 2004-12-13 08:53
反正我信了
阅读(226)
评论(0)
推荐(0)
摘要:
在上面的章节我们提到,实体bean的属性可以是java基本对象、Date等,事实上,实体Bean的属性也可以是其他的java对象。这些Java对象不能直接从持久化上下文中读取,它依赖于主实体bean。不象关联实体Bean,在EJB3.0中不支持依赖值对象的集合。依赖值对象不支持继承,这将在EJB3.1中在讨论。依赖类需要使用◎DependentObject来注释:@Target({TYPE}) @Retention(RUNTIME)public @interface DependentObject {AccessType access() default PROPERTY;}这个注释可以指定容 阅读全文
posted @ 2004-12-13 08:52
反正我信了
阅读(214)
评论(0)
推荐(0)
摘要:
在上面一个例子中,实体Bean的属性对应到数据表中的列,都是采用默认的设置。通过Column,你可以为属性指定数据表中的列名。Column的声明如下:@Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)public @interface Column {String name() default "";boolean primaryKey() default false;boolean unique() default false;boolean nullable() default true;boolean insertab 阅读全文
posted @ 2004-12-13 08:49
反正我信了
阅读(319)
评论(0)
推荐(0)
摘要:
在EJB3.0中开发实体Bean非常简单,你可以象开发一般的java bean一样编程,只需做少量的注释。一个实体bean不需要实现Home接口或者Remote、Local接口。实体Bean通过EntityManager产生、查找、和持久层结合、从持久层收回等操作。JBoss的EJB3.0架构在Hibernate之上。注释:@Entity:如果你要建立一个实体Bean的类,你必须在类上加上这个注释,用来告诉容器这个类是实体Bean。这个Bean的主键由@Id指定。这个注释的声明如下:@Target(TYPE) @Retention(RUNTIME)public @interface Entit 阅读全文
posted @ 2004-12-13 08:46
反正我信了
阅读(493)
评论(0)
推荐(0)
摘要:
可以通过访问SessionContext得到它的定时服务。SessionContext可以通过注入的方式得到:private @Inject SessionContext ctx;在EJB2.1的规范中需要实现ejbTimeout方法,当然还有ejbPassivate、ejbRemove等方法。在EJB3.0中,只有你想用它们的时候,你才必须创建它们,否则不必实现。这个例子主要有5个文件,这个例子的Bean是一个无状态会话Bean:NewsTimer.java:业务接口。NewsTimer.java:业务实现类。将来我们开发的EJB也都是这样命名(在接口名上加上Bean)。Client.jav 阅读全文
posted @ 2004-12-13 08:44
反正我信了
阅读(141)
评论(0)
推荐(0)
摘要:
消息驱动Bean的业务接口已经被定义,对于使用JMS来说那就是MessageListener接口,这个接口定义了OnMessage方法。实现类必须使用MessageDriven注释。可以实现也可以不实现setMessageDrivenContext和ejbRemove方法。在JBOSS中,通过ConnectionConfig指定消息的队列的JNDI名称。@ConnectionConfig(destinationType = javax.jms.Queue.class, destinationJndiName = "queue/kuaffejb3/sample", durab 阅读全文
posted @ 2004-12-13 08:42
反正我信了
阅读(274)
评论(0)
推荐(0)
摘要:
依赖注入(Dependency Injection),又称作控制反转(IOC),本来是一种设计模式,现在被吵得热火朝天,有点过了。比较有名项目如String,picoContainer等。在EJB3.0中,可以通过在字段和设置方法上加上注释注入依赖,我想在很快会有新的项目,或者在原来的项目的基础上,一些IOC容器会采用注释的方式注入依赖,JDK5.0加入的注释的确是一个很强大的功能,相对而言,在.net中的属性却没有发挥那么大的价值。这就是开源的威力,成千上万的在开源java程序员不断涌现出新的想法新的功能。看下面的例子:我们知道,JBOSS中已经默认配置了一个数据源,它的JNDI名称是&qu 阅读全文
posted @ 2004-12-13 08:40
反正我信了
阅读(200)
评论(0)
推荐(0)
摘要:
不象在EJB2.X中,需要在部署文件中部署事务。EJB3.0通过注释就为指定的类或者方法提供事务支持。在EJB3.0的预览版规范中,指明使用TransactionAttribute作为注释,TransactionAttribute的声明如下@Target({METHOD, TYPE}) @Retention(RUNTIME)public @interface TransactionAttribute {TransactionAttributeType value() default REQUIRED;}TransactionAttributeType是一个枚举类型:public enum Tr 阅读全文
posted @ 2004-12-13 08:37
反正我信了
阅读(445)
评论(0)
推荐(0)
摘要:
和无状态会话Bean一样,一个有状态会话Bean必须有一个业务接口,这个接口由会话Bean来实现,或者也可以由会话Bean来产生。这样,你可以只写一个文件,就可以生成业务逻辑实现类、远程接口、本地接口等。在目前jboss的实现中,必须要有一个独立的业务接口。这个接口不必实现EJBObject或者EJBLocalObject。一个有状态会话Bean必须使用Statelfull注释,以表明它是一个有状态的会话Bean。EJB容器将根据这个注释来判定它的类型。或者实现javax.ejb.SessionBean接口。一个有状态的会话Bean可以实现setSessionContext方法,也可以不实现。 阅读全文
posted @ 2004-12-13 08:34
反正我信了
阅读(293)
评论(0)
推荐(0)
摘要:
在所有的EJB3.0规范中定义的EJB,都不必实现Home接口。一个会话Bean必须有一个业务接口,这个接口由会话Bean来实现,或者也可以由会话Bean来产生。这样,你可以只写一个文件,就可以生成业务逻辑实现类、远程接口、本地接口等。…@Remote@Local@Statelesspublic class CounterBean{ ……}在目前jboss的实现中,必须要有一个独立的业务接口。这个接口不必实现EJBObject或者EJBLocalObject。一个无状态会话Bean必须使用Stateless注释,以表明它是一个无状态的会话Bean。EJB容器将根据这个注释来判定它的类型。或者实 阅读全文
posted @ 2004-12-13 08:30
反正我信了
阅读(932)
评论(0)
推荐(0)
浙公网安备 33010602011771号