Hibernate单向关联1-N
来源:互联网 发布:vscode spring boot 编辑:程序博客网 时间:2024/05/22 06:44
基于外键1-N关联(无连接表)
一个Customer关联多个Card
Customer实体(1端):
package com.ydoing.hibernate4;import java.util.HashSet;import java.util.Set;import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.OneToMany;import javax.persistence.Table;@Entity@Table(name = "customer_inf")public class Customer { @Id @Column(name = "customer_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String name; @OneToMany(targetEntity = Card.class, cascade = CascadeType.ALL) @JoinColumn(name = "customer_id", referencedColumnName = "customer_id") private Set<Card> cards = new HashSet<>(); public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<Card> getCards() { return cards; } public void setCards(Set<Card> cards) { this.cards = cards; }}
Card实体(N端):
package com.ydoing.hibernate4;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;@Entity@Table(name = "card_inf")public class Card { @Id @Column(name = "card_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
测试:
package com.ydoing.hibernate4;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.junit.BeforeClass;import org.junit.Test;public class Main { private static Session session; @BeforeClass public static void init() { Configuration conf = new Configuration(); conf.configure(); ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()) .build(); SessionFactory factory = conf.buildSessionFactory(serviceRegistry); session = factory.openSession(); } @Test public void test() { Transaction tx = session.getTransaction(); tx.begin(); Customer customer = new Customer(); customer.setName("Jack"); Card card1 = new Card(); card1.setName("ICBC"); Card card2 = new Card(); card2.setName("CCB"); customer.getCards().add(card1); customer.getCards().add(card2); session.save(customer); tx.commit(); session.close(); }}
Console输出:
Hibernate: insert into customer_inf (name) values (?)Hibernate: select last_insert_id()Hibernate: insert into card_inf (name) values (?)Hibernate: select last_insert_id()Hibernate: insert into card_inf (name) values (?)Hibernate: select last_insert_id()Hibernate: update card_inf set customer_id=? where card_id=?Hibernate: update card_inf set customer_id=? where card_id=?
从输出不难看出Hibernate主要进行了5个操作。首先向customer_inf插入一条数据,向card_inf插入两条数据。然后两次更新card_inf表。
数据表:
customer_inf:
card_inf:
有连接表的单向1-N关联
只要改变前面Customer类就行了
package com.ydoing.hibernate4;import java.util.HashSet;import java.util.Set;import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.JoinTable;import javax.persistence.OneToMany;import javax.persistence.Table;@Entity@Table(name = "customer_inf")public class Customer { @Id @Column(name = "customer_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String name; @OneToMany(targetEntity = Card.class, cascade = CascadeType.ALL) // @JoinColumn(name = "customer_id", referencedColumnName = "customer_id") @JoinTable(name = "customer_card_inf", joinColumns = @JoinColumn(name = "customer_id", referencedColumnName = "customer_id"), inverseJoinColumns = @JoinColumn(name = "card_id", referencedColumnName = "card_id", unique = true)) private Set<Card> cards = new HashSet<>(); public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<Card> getCards() { return cards; } public void setCards(Set<Card> cards) { this.cards = cards; }}
Console输出:
Hibernate: insert into customer_inf (name) values (?)Hibernate: select last_insert_id()Hibernate: insert into card_inf (name) values (?)Hibernate: select last_insert_id()Hibernate: insert into card_inf (name) values (?)Hibernate: select last_insert_id()Hibernate: insert into customer_card_inf (customer_id, card_id) values (?, ?)Hibernate: insert into customer_card_inf (customer_id, card_id) values (?, ?)
从输出不难看出,Hibernate创建了连接表customer_card_inf。
数据库表:
1 0
- Hibernate单向关联N-1
- Hibernate单向关联1-N
- Hibernate 单向N-1关联
- Hibernate单向关联N-N
- Hibernate的单向1-N关联(三)
- Hibernate的关联映射(1)-单向N-1关联
- Hibernate的关联映射(3)-单向1-N关联
- 【hibernate】关联映射那些事(一)---单向N-1关联与单向1-1关联
- 【hibernate】关联映射那些事(二)--单向1-N映射和单向N-N映射
- Hibernate学习随笔-----关系映射(1)单向N-1关联
- Hibernate关系映射1:单向N-1关联
- Hibernate单向1-N关联的简单示例
- Hibernate学习随笔-----关系映射(3)单向1-N关联
- Hibernate关联关系之——单向n-1
- Hibernate的单向N-1关联(一)
- Hibernate 1-N单向关联(注解实现)
- Hibernate的关联映射(4)-单向N-N关联
- Hibernate单向关联1-1
- Hdu 2066 一个人的旅行(dijkstra算法)
- Web.xml配置详解之context-param
- 优化算法的比较,选择
- hive优化
- 【@property的特性】
- Hibernate单向关联1-N
- 【暑期基础2】O HDU 2040 亲和数
- iOS绘图API的使用
- spring配置中mappingResources和mappingLocations
- mysql左连和右连
- hdoj 5289 Assignment 【RMQ + 二分查找区间最优长度】
- mysql 连接url中useUnicode=true&characterEncoding=UTF-8 的作用
- 字典的常用方法(含可变字典)
- mysql 连接url中useUnicode=true&characterEncoding=UTF-8 的作用