教学管理系统-实体Bean

原创 2006年05月30日 00:37:00

1.抽象基类

每个实体Bean都有一些类似的字段,例如id,version等,所以可以抽象出一个基类来。

package org.bnuitse.tms.model;
import java.io.Serializable;
import javax.persistence.MappedSuperclass;
import javax.persistence.Version;
@MappedSuperclass
public abstract class AbstractEntityBean implements IEntityBean, Serializable {
 private static final long serialVersionUID = 1L;
 protected int id;
 private int version;
 public AbstractEntityBean() {
 }
 public void setId(int id) {
  this.id = id;
 }
 @Version
 public int getVersion() {
  return version;
 }
 public void setVersion(int version) {
  this.version = version;
 }
}
@MappedSuperclass用于标识AbstractEntityBean中的数据字段也用于持久化。
IEntityBean是一个接口,用于会话Bean进行统一处理。见《教学管理系统-会话Bean》。
package org.bnuitse.tms.model;
public interface IEntityBean {
 int getId();
}

2.具体类

具体类需要定义从接口继承来的抽象方法getId(),原因是每个具体类对应数据库的主键名称、产生方式可能不同,需要在getId()方法上用@Column进行标识。

一对多数据,例如classes和depts,如果想要处理简单些,可以用Hibernate的DELETE_ORPHAN进行标识,具体含义见Hibernate文档。

一对多数据提供了addXxx和removeXxx方法,为的是进行aspect编程,见《教学管理系统-面向方面的编程》。

一对多数据通常是延迟加载。可以在查询语句中使用fetch加载lazy data。为了使用方便,自定义一个annotation称为@EagerlyFetchQuery,在会话Bean中会查找它,执行里面定义的查询。

private static final long serialVersionUID字段需要定义,原因有二:一是如果一个类实现Serializable接口,推荐定义该字段;二是当aspectj织入代码产生新类时,如果没有定义该字段,会自动生成一个新的serialVersionUID值(见java.io),这样,UI从服务器端取出的数据和本地类的版本号不同,将产生异常。

package org.bnuitse.tms.model.security;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import org.bnuitse.tms.model.AbstractEntityBean;
import org.bnuitse.tms.model.EagerlyFetchQuery;
@Entity
@Table(name = "org_college")
@EagerlyFetchQuery("from College o left join fetch o.classes left join fetch o.depts where o.id = :id")
public class College extends AbstractEntityBean {
 private static final long serialVersionUID = -8443100575405647610L;
 private String name;
 private List<CollegeClass> classes = new ArrayList<CollegeClass>();
 private List<CollegeDept> depts = new ArrayList<CollegeDept>();
 
 @Id
 @Column(name="collegeId")
 @TableGenerator(name = "CollegeGen", table = "pub_keygen", pkColumnName = "keyid", valueColumnName = "keyvalue", pkColumnValue = "College", allocationSize = 10, initialValue = 10000)
 @GeneratedValue(strategy = GenerationType.TABLE, generator = "CollegeGen")
 public int getId() {
  return id;
 }
 
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 @OneToMany(mappedBy = "college", cascade = CascadeType.ALL)
 @org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
 public List<CollegeClass> getClasses() {
  return classes;
 }
 public void setClasses(List<CollegeClass> classes) {
  this.classes = classes;
 }
 
 public void addClass(CollegeClass collegeClass) {
  collegeClass.setCollege(this);
  this.classes.add(collegeClass);
 }
 public void removeClass(CollegeClass collegeClass) {
  this.classes.remove(collegeClass);
 }
 
 @OneToMany(mappedBy = "college", cascade = CascadeType.ALL) 
 @org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
 public List<CollegeDept> getDepts() {
  return depts;
 }
 public void setDepts(List<CollegeDept> depts) {
  this.depts = depts;
 }
 public void addDepartment(CollegeDept collegeDept) {
  collegeDept.setCollege(this);
  this.depts.add(collegeDept);
 }
 public void removeDepartment(CollegeDept collegeDept) {
  this.depts.remove(collegeDept);
 }
 
 public String toString() {
  return this.getId() + "-" + this.name;
 }
}

相关文章推荐

教学管理系统

教学管理系统 这是这几天写的一个教学管理系统,功能不是很齐全,而且还有一些小问题,在第158行我想尝试一下如同电脑中输入密码时有圆点或星号覆盖输入密码的情形,但是失败了,请各位大神帮忙看看。 ...

cURL模拟登录教学管理系统

cURL模拟登录教学管理系统 2014-09-12 17:10:21 标签: php curl 微信查课表 模拟登陆 原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

教学管理系统E-R建模

对于教学管理系统,我们就很容易想到教学管理中肯定有老师,而老师是有性别,年龄,电话号码,家庭住址作为属性的,有老师就一定有课程,老师可以进行授课,老师可以以一对多的形式讲授特定的课程系,而课程要进行区...
  • suwu150
  • suwu150
  • 2016年10月03日 18:04
  • 675

EJB实体Bean与事物管理

  • 2016年11月24日 21:43
  • 27KB
  • 下载

教学管理系统

  • 2014年05月19日 10:52
  • 2.47MB
  • 下载

EJB实体Bean与事物管理

一、jboss7.1.1配置mysql数据源 #1.到http://www.mysql.com/downloads/connector/j/下载MySQL的驱动包 #2.进入jboss-as-7.1...
  • NK_TF
  • NK_TF
  • 2016年11月24日 21:46
  • 387

jsp网络教学管理系统

  • 2013年08月05日 12:39
  • 21.61MB
  • 下载

教学管理系统

  • 2013年03月22日 09:46
  • 1.03MB
  • 下载

ejb3的实体bean管理类EntityManager常用API

转载:http://everlive.iteye.com/blog/215820

教学管理系统 VC++

  • 2010年06月15日 18:07
  • 500KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:教学管理系统-实体Bean
举报原因:
原因补充:

(最多只允许输入30个字)