主要是根据设想的创建好版块/栏目/贴子/回复等类,和用户类一样的,实际上都是数据类,没有业务方法.
在这些实体类的设计过程中,主要就是处理好类与类之间的关系,在设计中,较多地用到了ManyToOne关系,考虑到,一个栏目会有成千上万条贴子,所以栏目和贴子之间并不设一对多关系.同样地,贴子和回复之间也是只设单向的ManyToOne.
对关系的注解还不是很了解,目前只是简单的使用.
在测试过程中发现,如果OneToMany没用设置mappedBy,则使用连接表方式连接,对于单向的OneToMany关系使用连接表方式(会产生一个由主表ID和从表ID两个字段组成的连接表)连接是hibernate所推荐的.在这个应用中,对栏目和版块之间,设置了一对多和多对一的双向连接,在从表中增加主表ID字段就可以了.因此应设好mappedBy,它的值就是N的一端引用1的一端的关联实体的那个属性.这样说起来很别扭,看一下原码就可以了.
package bbs.domain.bean;
import java.io.Serializable;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import org.hibernate.annotations.GenericGenerator;
@Entity
public class Board implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1661836451186707456L;
private int id;
private String name;
private String describe;
private int index;
private boolean visible;
private Set<User> managers;
private Set<SubBoard> subs;
@Id
@GeneratedValue(generator="native")
@GenericGenerator(strategy="native", name="native")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(length=50,nullable=false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(length=255)
public String getDescribe() {
return describe;
}
public void setDescribe(String describe) {
this.describe = describe;
}
@Column(name="No")
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
@Column
public boolean isVisible() {
return visible;
}
public void setVisible(boolean visible) {
this.visible = visible;
}
@ManyToMany(cascade={CascadeType.REFRESH,CascadeType.REMOVE})
public Set<User> getManagers() {
return managers;
}
public void setManagers(Set<User> managers) {
this.managers = managers;
}
@OneToMany(cascade={CascadeType.REFRESH,CascadeType.REMOVE},mappedBy="board")
//SubBoard是多的一端,它有一个属性board,这个属性的类型是Board,Board也就是一的一端,那么mappedBy的值就是这个属性名
public Set<SubBoard> getSubs() {
return subs;
}
public void setSubs(Set<SubBoard> subs) {
this.subs = subs;
}
}
package bbs.domain.bean;
import java.io.Serializable;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import org.hibernate.annotations.GenericGenerator;
@Entity
public class SubBoard implements Serializable{
/**
*
*/
private static final long serialVersionUID = 2098758465186701917L;
private int id;
private String name;
private String describe;
private int index;
private boolean visible;
private Board board;
private Set<User> managers;
@Id
@GeneratedValue(generator="native")
@GenericGenerator(strategy="native", name="native")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(length=50,nullable=false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(length=255)
public String getDescribe() {
return describe;
}
public void setDescribe(String describe) {
this.describe = describe;
}
@Column(name="No")
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
@Column
public boolean isVisible() {
return visible;
}
public void setVisible(boolean visible) {
this.visible = visible;
}
@ManyToOne(cascade={CascadeType.REFRESH},optional=true)
public Board getBoard() {
return board;
}
public void setBoard(Board board) {
this.board = board;
}
@ManyToMany(cascade={CascadeType.REFRESH,CascadeType.REMOVE})
public Set<User> getManagers() {
return managers;
}
public void setManagers(Set<User> managers) {
this.managers = managers;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
}