创建论坛中的实体类

本文介绍了创建论坛的实体类,如版块、栏目、贴子和回复,重点在于处理实体类之间的关系。在设计中,利用ManyToOne关系避免了大量一对多关系可能导致的性能问题。文中通过代码示例展示了如何在Hibernate中进行双向和单向关系的注解,强调了mappedBy的使用,以实现数据表间的正确关联。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 主要是根据设想的创建好版块/栏目/贴子/回复等类,和用户类一样的,实际上都是数据类,没有业务方法.

 

在这些实体类的设计过程中,主要就是处理好类与类之间的关系,在设计中,较多地用到了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;
 }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值