日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

双向@OneToMany / @ManyToOne关联

發布時間:2023/12/3 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 双向@OneToMany / @ManyToOne关联 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

編程的目標之一是代表現實世界中的模型。 通常,應用程序需要對實體之間的某些關系進行建模。 在上一篇有關Hibernate關聯的文章中,我描述了建立“一對一”關系的規則。 今天,我將向您展示如何設置雙向的“ 一對多 ”和“ 多對一 ”關聯。 這個例子將基于以前的Hibernate教程 。

首先,我需要說我的代碼示例將基于一個簡單的情況。 讓我們想象一個足球聯賽。 每個聯賽都有球隊,并且在球隊中可以扮演一些球員。 因此,總結如下:一隊有很多球員,一個球員可以為一個隊效力。 通過這種方式,我們得到了明顯的“ 一對多 ”和“ 多對一 ”關系。
在此示例中,我將MySQL用作數據庫。 以下是用于創建表的腳本:

CREATE TABLE `teams` (`id` int(6) NOT NULL AUTO_INCREMENT,`name` varchar(20) NOT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;CREATE TABLE `players` (`id` int(6) NOT NULL AUTO_INCREMENT,`lastname` varchar(20) NOT NULL,`team_id` int(6) NOT NULL,PRIMARY KEY (`id`),KEY `player's team` (`team_id`),CONSTRAINT `player's team` FOREIGN KEY (`team_id`) REFERENCES `teams` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

下一步是創建POJO:

import java.util.Set;import javax.persistence.*;@Entity @Table(name = 'teams') public class Team {@Id@GeneratedValueprivate Integer id;private String name;@OneToMany(mappedBy='team', cascade=CascadeType.ALL)private Setplayers;public Team(String name) {this.name = 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;}public SetgetPlayers() {return players;}public void setPlayers(Setplayers) {this.players = players;} }

我使用@OneToMany是因為一個團隊可以擁有許多球員。 在下一個POJO中,關聯將為@ManyToOne,因為許多球員可以為一個團隊效力。

import javax.persistence.*;@Entity @Table(name = 'players') public class Player {@Id@GeneratedValueprivate Integer id;private String lastname;@ManyToOne@JoinColumn(name = 'team_id')private Team team;public Player(String lastname) {this.lastname = lastname;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getLastname() {return lastname;}public void setLastname(String lastname) {this.lastname = lastname;}public Team getTeam() {return team;}public void setTeam(Team team) {this.team = team;} }

在這里,我指定將從擁有方( Teams )連接的列( team_id )。 注意,我沒有在POJO中聲明team_id字段。 如果我需要為球員更換球隊,我只需要使用setTeam(Team team) setter。

聲明POJO之后,我可以演示如何持久化它們:

...public static void main(String[] args) {SessionFactory sessionFactory = HibernateUtil.getSessionFactory();Session session = sessionFactory.openSession();session.beginTransaction();Team team = new Team('Barcelona');Setplayers = new HashSet();Player p1 = new Player('Messi');Player p2 = new Player('Xavi');p1.setTeam(team);p2.setTeam(team);players.add(p1);players.add(p2);team.setPlayers(players);session.save(team);session.getTransaction().commit();session.close();} ...

代碼執行的結果是:

休眠:插入團隊(名稱)值(?)
休眠:插入玩家(姓氏,team_id)值(?,?)
休眠:插入玩家(姓氏,team_id)值(?,?)

就是這樣,在本教程中,我演示了如何設置“ 一對多 ”和“ 多對一 ”雙向關聯。 在同一個教程中,單向關聯的示例沒有任何意義。 因為Hibernate具有自己的最佳實踐:

單向關聯更難以查詢。 在大型應用程序中,查詢中的幾乎所有關聯都必須在兩個方向上都是可導航的。

參考: Fruzenshtein的筆記博客中來自我們的JCG合作伙伴 Alex Fruzenshtein的雙向@OneToMany / @ManyToOne協會 。

翻譯自: https://www.javacodegeeks.com/2013/03/bidirectional-onetomany-manytoone-association.html

總結

以上是生活随笔為你收集整理的双向@OneToMany / @ManyToOne关联的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。