hibernate中一对多关系模式的设计

hibernate中一对多的关系模式的设计

注解应该交由多的一方维护和管理。

例如:bbs的模块设计

三个表 版块表(category) 、主题帖表(topic)和回帖表(msg)

他们之间的对应关系是:一个版块对应多个主题帖,一个主题帖有多个回复贴。

以下是对应的建表语句。

CREATE TABLE `category` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;
CREATE TABLE `topic` (
  `id` int(11) NOT NULL auto_increment,
  `createDate` datetime default NULL,
  `title` varchar(255) default NULL,
  `category_id` int(11) default NULL,
  PRIMARY KEY  (`id`),
  KEY `FK_jqmw7lsw6i6lrdnw07c1id1nt` (`category_id`),
  CONSTRAINT `FK_jqmw7lsw6i6lrdnw07c1id1nt` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;
CREATE TABLE `msg` (
  `id` int(11) NOT NULL auto_increment,
  `cont` varchar(255) default NULL,
  `topic_id` int(11) default NULL,
  PRIMARY KEY  (`id`),
  KEY `FK_87qfcl8orshwjlllfik5deys5` (`topic_id`),
  CONSTRAINT `FK_87qfcl8orshwjlllfik5deys5` FOREIGN KEY (`topic_id`) REFERENCES `topic` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;

那么在对象模型中是如何设计的呢?

实际过程中是通过hibernate的逆向工程生成类

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

//bbs版块下的主题  多个主题对应一个版块
@Entity
public class Topic {
	private int id;
	private String title;
	private Category category;
	//private Category category2;

	private Date createDate;

	public Date getCreateDate() {
		return createDate;
	}
	public void setCreateDate(Date createDate) {
		this.createDate = createDate;
	}
	@ManyToOne(fetch=FetchType.LAZY)
	public Category getCategory() {
		return category;
	}
	public void setCategory(Category category) {
		this.category = category;
	}
	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}

}
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

//bbs的版块
@Entity
public class Category {
	private int id;
	private String name;
	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

//bbs主题下面的回帖   多个回帖位于一个主题帖之下
@Entity
public class Msg {
	private int id;
	private String cont;
	private Topic topic;
	@ManyToOne
	public Topic getTopic() {
		return topic;
	}
	public void setTopic(Topic topic) {
		this.topic = topic;
	}
	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}

	public String getCont() {
		return cont;
	}
	public void setCont(String cont) {
		this.cont = cont;
	}
}

关于注解的几个注意点:

1.当表名和类名不同,对表名进行配置

@Entity

@Table(name="_teacher")

public
class
Teacher {

}

2.当字段名和属性名不同时,对属性名进行配置

@Column(name="_name")

public String getName() {

return
name;

}

3.manytoone注解交由多的哪一方维护和管理

4.映射日期和时间的类型,指定精度

@Temporal(参数) 参数有3种 只显示时间,只显示日期,时间日期都显示

//@Temporal(TemporalType.DATE) 
只显示日期

//@Temporal(TemporalType.TIME) 
只显示时间

//@Temporal(TemporalType.TIMESTAMP) 
显示日期与时间

时间: 2024-10-24 20:25:54

hibernate中一对多关系模式的设计的相关文章

Hibernate中一对多关联的时候hbm.xml文件的配置

body { font-family: 微软雅黑,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5; } html, body { } h1 { font-size:1.5em; font-weight:bold; } h2 { font-size:1.4em; font-weight:bold; } h3 { fon

hibernate中的继承关系

  1.       hibernate中的继承关系   代码:   <1>.POJO类:(Person类)   package qau.edu; import java.util.Date; public class Person { //  成员变量: private int id ; private String name ; private Date date ; //  相应的getter和setter方法: public int getId() { return id; } pub

Hibernate中的映射关系(一对多)

在数据库中表和表之间的关系有几种,下面就详细说一下在Hibernate中怎样映射一对多的关系 Hibernate映射一对多的关系,其实就是持久类之间的映射,那如何把持久类关联起来呢??那就用到.hbm.xml文件的<many-to-one>标签了 具体做法如下: 新建一个customer类: package com.jeremy.hibernate.app.example; public class Customer { private Integer customerId; private

Hibernate中一对多和多对一关系

1.单向多对一和双向多对一的区别? 只需要从一方获取另一方的数据时 就使用单向关联双方都需要获取对方数据时 就使用双向关系 部门--人员 使用人员时如果只需要获取对应部门信息(user.getdeptarment())不需要 从部门下的人员信息时,就配置成单向 多对一 使用部门时如果只需要获取部门下人员信息(deptartmanet.getusers())不需要 从人员获取部门信息时,就配置成单向 一对多 既要获取部门下人员 deptartmanet.getusers()又要从人员获取部门信息

mybatis 中一对多关系简单应用

1:应用场景 主要需要实现是一个实体类中存在一个字段,该字段为一个集合,集合存放的是另外一个实体类类型 如教室类(Class)中有一个学生类(student)的集合,即表示一个教室中 存在多个学生 项目保存路径: D:\海同\mybatis\9.16\FirstMybatis 2:相关代码 创建数据库中表语句 CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name VARCHAR(20) ); CREATE TABLE

关于hibernate中多对多关系

关于多对多关系 数据库:在使用多对多的关系时,我们可以使用复合主键.也可以不使用,直接引入外键同样可以实现. 在数据库中使用多对多关系时,需要一个中间表. 多对多关系中的数据库结构如下: 表:Orders 字段:orderid(主键)..... 表:Users 字段:usersid(主键),.... 中间表: cy_order_user 字段:cy_order_user主键id 外键:cy_orderid(引入Orders表) 外键:cy_usersid(引入Users表) 注意:中间表的外键是

Hibernate中多对多关系转换

问题来源 在运用SSH架构开发Web应用时,总会遇到表之间一对多.多对一.多对多等等的关系,而对于多对多的关系,在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使用中最好转换成一对多的对象模型:hibernate会为我们创建中间关联表,转换成两个一对多. 问题解决 在此用开发OA项目时角色表和权限之间的多对多关系提供解决问题的建议 例子:角色与权限 (1)先看需求 (2)分析 第一,角色与权限:多对多 一个角色可以有多个权限,一个权限可以被多个角色使用 第二,在角色的增删改查中涉及到了

Hibernate中一对多的注解和配置案例

1.实现hibernate4.3.8的简单案例: 2.注解方式下的一对多和多对一: a.业务场景:学校的专业.班级.学生之间的关系:[周知:一个专业有多个班级:一个班级有多个学生] 3.xml方式下的一对多和多对一: 4.案例下载[面积分下载地址:]

hibernate 中一对多的注解配置

//一方@Entity@Table(name="test_classinfo")public class ClassInfo { @Id @SequenceGenerator(name="seqClassInfo",sequenceName="seq_test_classinfo") @GeneratedValue(generator="seqClassInfo") private Integer cid; private S