教学管理系统-实体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;
 }
}

Java-JFrame-swing教务管理系统简单版

教务管理系统简单版 学生信息添加,修改,删除,模糊查找,分页,简单封装 学生登陆,注册功能等功能。 项目面向Java-JFrame-swing初学者,仅供交流使用,有问题请指出。 实现功能如下:pac...
  • KouZuoKouKouZuo
  • KouZuoKouKouZuo
  • 2017年12月24日 21:49
  • 102

使用python开发的教务管理系统

使用python开发的教务管理系统我调用了Flask框架来构建整个web环境,第一次使用flask,还是很好用的一个轻量级框架,函数名就对应操作,非常方便,还有模板的显示,渲染功能都特别简单实用,一看...
  • rain_web
  • rain_web
  • 2017年11月15日 16:53
  • 360

数据库设计实例 教务管理系统

数据库实验七 数据库设计 题目要求:       设计一个教务管理系统。要求管理包括:学生的档案,学生选课的情况,学生每学期的综合测评,教师档案,教师工作量等等。具体考核方法根据自己了解的实际情况处理...
  • lesky
  • lesky
  • 2006年12月25日 22:00
  • 26529

模拟学生教务管理系统(C++实现)

代码是参考博主:http://blog.csdn.net/qq_32483145/article/details/51169518    我修改了其中的一些BUG,加上了一些数据判断和错误处理。部分效...
  • qq_21792169
  • qq_21792169
  • 2016年11月27日 21:33
  • 2871

教学管理系统

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

学生信息管理系统源代码和视频文件,视频教程!

学习是自己,需要学生管理系统源码的话,还不如自己写一遍,把代码写下来,该视频使用的是gcc编译器. http://pan.baidu.com/s/1boFTGKZ...
  • shadow4627558
  • shadow4627558
  • 2017年06月08日 16:04
  • 544

Ejb的实体bean

在上一篇文章中,我们学习了EJB的会话bean,这篇文章我们来说一下EJB的实体bean,说到实体bean,就不得不说JPA了,JPA是在EJB3.0的时候提出来的,但是他不局限于EJB3.0,而是适...
  • zhanghongjie0302
  • zhanghongjie0302
  • 2015年12月18日 13:13
  • 1709

c++学习之用c++写一个教务管理系统

学生教务管理系统: 1.存储设备:文件 ,c++中的容器 2.容器自从打开始终存在    直到程序结束后容器才消失  3.学生信息什么时候写进容器 // 构造函数有一个输入的过程 4.什么时候开...
  • qq_28174951
  • qq_28174951
  • 2017年09月11日 19:26
  • 407

教学管理系统-需求分析

1. 系统描述教学管理系统(TMS)是大学内部学院使用的教学辅助管理系统,系统主要功能包括学生作业、教学课件的管理。2. 场景描述2.1 教学管理2.1.1 教师发布课件老师李四是《Java程序设计》...
  • s3n
  • s3n
  • 2006年05月27日 23:51
  • 11424

教学管理系统-数据库设计

  • s3n
  • s3n
  • 2006年05月28日 00:10
  • 3045
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:教学管理系统-实体Bean
举报原因:
原因补充:

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