教學管理系統-實體Bean

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.