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) 显示日期与时间
原文地址:http://blog.csdn.net/qzp1991/article/details/42701873