Hibernate中一对一,一对多,多对多的写法
来源:互联网 发布:软件专业就业前景 编辑:程序博客网 时间:2024/05/22 04:02
hibernate中各类对应的bean类写法
1、一对一的情况
假设我们用Address类和User类做一对一的对应
User类
package com.telek.model;import java.util.HashSet;import java.util.Set;import javax.annotation.Generated;import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.OneToOne;import javax.persistence.Table;@Entity@Table(name="user")//如果表明和对象名不一致 则需要单独加上该注解public class User implements java.io.Serializable{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; @Column(name="username") private String username; @Column(name="password") private String password; //fetch代表数据的抓取策略lazy就是指用到了该属性才会去查询(eager刚好相反) @OneToOne(cascade = {CascadeType.ALL},fetch = FetchType.LAZY ) private Address address=new Address(); public User(){} public User(String username,String password){ this.username = username; this.password = password; } @return the address public Address getAddress() { return address; } @param address the address to set public void setAddress(Address address) { this.address = address; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
Address类
package com.telek.model;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;import javax.persistence.OneToOne;import javax.persistence.Table;@Entity@Table(name="address")public class Address { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String address; @OneToOne(optional= false,fetch = FetchType.EAGER)//cascade = CascadeType.ALL, @JoinColumn(name="uid") private User user; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public User getUser() { return user; } public void setUser(User user) { this.user = user; }}
1、一对多的情况
假设我们用Address类和User类做一对一的对应
Address类
package com.telek.model;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;import javax.persistence.OneToOne;import javax.persistence.Table;@Entity@Table(name="address")public class Address { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String address; @ManyToOne(optional= false,fetch = FetchType.EAGER)//cascade = CascadeType.ALL, @JoinColumn(name="uid") private User user; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public User getUser() { return user; } public void setUser(User user) { this.user = user; }}
User类
package com.telek.model;import java.util.HashSet;import java.util.Set;import javax.annotation.Generated;import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.OneToMany;import javax.persistence.OneToOne;import javax.persistence.Table;@Entity@Table(name="user")//如果表明和对象名不一致 则需要单独加上该注解public class User implements java.io.Serializable{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; @Column(name="username") private String username; @Column(name="password") private String password; //fetch代表数据的抓取策略lazy就是指用到了该属性才会去查询(eager刚好相反) @OneToMany(cascade = {CascadeType.ALL},mappedBy="user",fetch = FetchType.LAZY ) private Set<Address> address = new HashSet<Address>(); public User(){} public User(String username,String password){ this.username = username; this.password = password; } public Set<Address> getAddress() { return address; } public void setAddress(Set<Address> address) { this.address = address; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
最后,附上一对多情况中Dao包类的测试方法
public void OnetoMore(){//一对多配置 Session session = sessionFactory.openSession(); User user = new User(); user.setUsername("wjw"); user.setPassword("wlf"); Address add1 = new Address(); add1.setAddress("浙江"); Address add2 = new Address(); add2.setAddress("北京"); add1.setUser(user);//在多的一方告诉hibernate我这个对象属于谁 add2.setUser(user); user.getAddress().add(add1);//在少的一端告诉hibernate我可以添加谁进来 user.getAddress().add(add2); session.beginTransaction(); session.save(user); session.close(); }
3、多对多的情况
假设我们用Tag类和Topic类作为演示
Tag类
package com.telek.model;// Generated 2016-3-4 9:16:37 by Hibernate Tools 4.3.1.Finalimport javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import static javax.persistence.GenerationType.IDENTITY;import java.util.HashSet;import java.util.Set;import javax.persistence.Id;import javax.persistence.ManyToMany;import javax.persistence.OneToMany;import javax.persistence.Table;/** * Tag generated by hbm2java */@Entity@Table(name="tag" ,catalog="springdemo")public class Tag implements java.io.Serializable { private Integer tagid; private String tag; private Set<Topic> topic=new HashSet<Topic>(); public Tag() { } public Tag(String tag) { this.tag = tag; } @Id @GeneratedValue(strategy=IDENTITY) @Column(name="tagid", unique=true, nullable=false) public Integer getTagid() { return this.tagid; } public void setTagid(Integer tagid) { this.tagid = tagid; } @Column(name="tag") public String getTag() { return this.tag; } public void setTag(String tag) { this.tag = tag; } /** * @return the topic */ @ManyToMany(cascade = {CascadeType.ALL},mappedBy="tag",fetch = FetchType.LAZY ) public Set<Topic> getTopic() { return topic; } /** * @param topic the topic to set */ public void setTopic(Set<Topic> topic) { this.topic = topic; }}
Topic类
package com.telek.model;// Generated 2016-3-4 9:16:37 by Hibernate Tools 4.3.1.Finalimport javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import static javax.persistence.GenerationType.IDENTITY;import java.util.HashSet;import java.util.Set;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.JoinTable;import javax.persistence.ManyToMany;import javax.persistence.Table;/** * Topic generated by hbm2java */@Entity@Table(name="topic" ,catalog="springdemo")public class Topic implements java.io.Serializable { private Integer topicid; private String title; private String context; private Set<Tag> tag = new HashSet<Tag>(); public Topic() { } public Topic(String title, String context) { this.title = title; this.context = context; } @Id @GeneratedValue(strategy=IDENTITY) @Column(name="topicid", unique=true, nullable=false) public Integer getTopicid() { return this.topicid; } public void setTopicid(Integer topicid) { this.topicid = topicid; } @Column(name="title") public String getTitle() { return this.title; } public void setTitle(String title) { this.title = title; } @Column(name="context") public String getContext() { return this.context; } public void setContext(String context) { this.context = context; } /** * @return the tag */ @ManyToMany(cascade = {CascadeType.ALL}) @JoinTable(name="topicandtag",joinColumns=@JoinColumn(name="topicid"),inverseJoinColumns=@JoinColumn(name="tagid")) public Set<Tag> getTag() { return tag; } /** * @param tag the tag to set */ public void setTag(Set<Tag> tag) { this.tag = tag; }}
最后在Dao里面写一个方法作为演示
public void ManyToMany(){ Session session = sessionFactory.openSession(); Topic topic = new Topic(); topic.setTitle(("大保健")); topic.setContext("来玩来玩"); Topic topic2 = new Topic(); topic2.setTitle(("大保健")); topic2.setContext("来玩来玩呀"); Tag tag1 = new Tag();tag1.setTag("服务"); Tag tag2 = new Tag();tag2.setTag("保健"); Set<Tag> tags = new HashSet<Tag>(); tags.add(tag1);tags.add(tag2); topic.setTag(tags); Set<Topic> topics = new HashSet<Topic>(); topics.add(topic); topics.add(topic2); tag1.setTopic(topics); tag2.setTopic(topics); session.beginTransaction(); session.save(topic); session.getTransaction().commit(); session.close();}
发现关系表和Tag表和Topic表都插入数据为正常
最后,附上数据库表的情况
另外,如果在topic和tag两边都加上
@ManyToMany(cascade = {CascadeType.ALL})@JoinTable(name="topicandtag",joinColumns=@JoinColumn(name="tagid"),inverseJoinColumns=@JoinColumn(name="topicid"))
即可以不用两边set关系,只用一边关联就可以两边都存入数据库
0 0
- Hibernate中一对一,一对多,多对多的写法
- Hibernate一对一,一对多,多对多
- hibernate中多对一、一对一、一对多、多对多的配置方法
- hibernate中多对一、一对一、一对多、多对多的配置方法
- hibernate 一对一、一对多、多对多的情况
- hibernate一对一、一对多、多对多的配置方法
- Hibernate中一对多,一对一,多对多的简单实现
- Hibernate中一对一以及一对多之间的关系
- NHB中一对一,一对多,多对一的实例
- Hibernate 一对一,一对多关系
- hibernate 一对多,一对一小结
- Hibernate双向一对一,一对多,多对多关系映射
- Hibernate 关系映射 (一对一,一对多,多对多)
- hibernate关联关系配置(一对一,一对多,多对多)
- Hibernate关联关系配置(一对一,一对多,多对多)
- 3、Hibernate一对一、一对多、多对多对应关系
- Hibernate关联关系映射 一对一 一对多 多对一
- hibernate多对一、一对一、一对多、多对多的配置方法
- 8、Hadoop分布式文件系统
- 种一棵树最好的时间是十年前,而后是现在
- mysql replication 主从…
- mysql 向 mariadb 平滑 过渡
- redis 分布式,主从同步
- Hibernate中一对一,一对多,多对多的写法
- php 实现同一个账号同时只能…
- shell中的多进程【并发】转
- MySQL带参数的存储过程小例子
- hdfs datanode 启动失败
- cURL超时设置
- Curl的毫秒超时的一个”Bug”
- Linux实现端口转发
- PHP5.5四种序列化性能对比