精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Jpa 中怎么玩一對多?

開發 前端
Jpa 中的一對一、一對多沒搞明白的話,總會覺得有點繞,今天咱們來簡單聊聊這個話題。

Jpa 中的一對一、一對多沒搞明白的話,總會覺得有點繞,今天咱們來簡單聊聊這個話題。

1. 一對一

比如說一個學校有一個地址,一個地址只有一個學校。

那么我們可以按照如下方式來設計類:

@Data
@Entity
@Table(name = "t_address")
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer aid;
private String province;
private String city;
private String area;
private String phone;
@OneToOne(cascade = CascadeType.ALL)
private School school;
}
@Data
@Entity
@Table(name = "t_school")
public class School {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer sid;
private String name;
@OneToOne(cascade = CascadeType.ALL)
private Address address;
}

一對一的關系,可以只在 School 中維護,也可以只在 Address 中維護,也可以兩者都維護,具體哪種,那就看需求了。

在上面的例子中,我們在 School 和 Address 中都通過 @OneToOne 注解來維護了一對一的關系。

cascade 用來配置級聯操作,有如下取值:

  • ALL:所有操作
  • PERSIST:級聯添加
  • MERGE:級聯更新
  • REMOVE:級聯刪除
  • REFRESH:級聯刷新

根據自己需求選擇合適的就行。

這樣,最終創建出來的 t_school 表和 t_address 表中,會分別多出來一個字段 address_aid 和 school_sid,這兩個字段都是外鍵,正是通過外鍵,將兩張表中不同的記錄關聯起來。

有的人可能不習慣這種自動添加的字段,那也可以自定義該字段,反正該字段總是要有的,自定義的方式如下:

@Data
@Entity
@Table(name = "t_address")
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer aid;
private String province;
private String city;
private String area;
private String phone;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "sid",referencedColumnName = "sid")
private School school;
@Column(insertable = false,updatable = false)
private Integer sid;
}
@Data
@Entity
@Table(name = "t_school")
public class School {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer sid;
private String name;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "aid",referencedColumnName = "aid")
private Address address;
@Column(insertable = false,updatable = false)
private Integer aid;
}

在 Address 中自定義一個 sid,并設置該字段不可添加和修改,然后通過 @JoinColumn 注解去指定關聯關系,@JoinColumn 注解中的 name 表示的是當前類中的屬性名,referencedColumnName 表示的則是 School 類中對應的屬性名。

在 School 類中做相似的操作。

最后啟動項目去觀察 MySQL 中生成的表。

2. 一對多

一個班級中有多個學生,而一個學生只屬于一個班級,我們可以這樣來定義實體類:

@Data
@Table(name = "t_student")
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer sid;
private String name;
@ManyToOne(cascade = CascadeType.ALL)
private Clazz clazz;
}
@Data
@Table(name = "t_clazz")
@Entity
public class Clazz {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer cid;
private String name;
@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
private List<Student> students;
}

Student 和 Clazz 的關系是多對一,用 @ManyToOne 注解,Clazz 和 Student 的關系是一對多,用 @OneToMany 注解。

Student 和 Clazz 的關系是多對一,將來的 t_student 表中會多出來一個屬性 clazz_cid,通過這個外鍵將 Student 和 Clazz 關聯起來。如果我們不想要自動生成的 clazz_cid,那么也可以自定義,方式如下:

@Data
@Table(name = "t_student")
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer sid;
private String name;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "cid")
private Clazz clazz;
@Column(insertable = false,updatable = false)
private Integer cid;
}

定義一個 cid 屬性,并設置為不可編輯和不可添加,然后通過 @JoinColumn 注解配置 cid 屬性為外鍵。

Clazz 和 Student 的關系是一對多,這個是通過一個自動生成的第三張表來實現的,如下:

3. 測試

3.1 添加測試

先來個一對一的添加測試,如下:

public interface SchoolRepository extends JpaRepository<School,Integer> {
}
@SpringBootTest
class JpaOneToManyApplicationTests {

@Autowired
SchoolRepository schoolRepository;
@Test
void contextLoads() {
School school = new School();
school.setSid(1);
school.setName("哈佛大學");
Address address = new Address();
address.setAid(1);
address.setProvince("黑龍江");
address.setCity("哈爾濱");
address.setArea("某地");
address.setPhone("123456");
school.setAddress(address);
schoolRepository.save(school);
}

}

在這個測試過程中,關聯關系是由 t_school 一方來維護了,因此將來填充的外鍵是 t_school 中的 aid。添加結果如下圖:

t_school

t_address

這是一個簡單的添加案例。

更新也是調用 save 方法,更新的時候會先判斷這個 id 是否存在,存在的話就更新,不存在就添加。

再來看班級的添加,如下:

public interface ClazzRepository extends JpaRepository<Clazz,Integer> {
}
@Autowired
ClazzRepository clazzRepository;
@Test
void test02() {
Clazz c = new Clazz();
c.setCid(1);
c.setName("三年級二班");
List<Student> students = new ArrayList<>();
Student s1 = new Student();
s1.setSid(1);
s1.setName("javaboy");
students.add(s1);
Student s2 = new Student();
s2.setSid(2);
s2.setName("張三");
students.add(s2);
c.setStudents(students);
clazzRepository.save(c);
}

注意,添加的是班級,所以班級和學生之間關系就由第三張表來維護,而不是由學生來維護。

3.2 查詢測試

再來一個簡單的查詢,假設我們現在想根據省份來搜索學校,如下:

public interface SchoolRepository extends JpaRepository<School,Integer> {
List<School> findSchoolByAddressProvince(String province);
}
@Autowired
SchoolRepository schoolRepository;
@Test
void test01() {
List<School> list = schoolRepository.findSchoolByAddressProvince("黑龍江");
System.out.println("list = " + list);
}

松哥給大家捋一下 Spring Data 如何解析上面自定義的查詢方法:

  • 首先截取掉 findSchoolByAddressProvince 的前綴,剩下 AddressProvince。
  • 檢查 School 是否有 addressProvince 屬性,有就按照該屬性查詢,對于我們的案例,并沒有 addressProvince 屬性,所以繼續下一步。
  • 從右側駝峰開始拆分,拆掉第一個駝峰后面的內容,我們這里拆分之后只剩下 Address 了,判斷 School 是否存在 Address 屬性,不存在就繼續重復該步驟,繼續切掉右側第一個駝峰。
  • 在上文案例中,School 中有 address 屬性,所以接下來就去檢查 address 中是否有 province 屬性,因為我們這里只剩下一個 province 了,如果剩下的字符串類似于 provinceAaaBbb 這種,那么繼續按照第三步去解析。

上面這個寫法有一個小小的風險,假設 School 中剛好就有一個屬性叫做 addressProvince,那么此時的分析就會出錯。所以,對于上面的查詢,我們也可以定義成如下方式:

public interface SchoolRepository extends JpaRepository<School,Integer> {
List<School> findSchoolByAddress_Province(String province);
}

此時就不會產生歧義了,系統就知道 province 是 address 的屬性了。

再來一個班級的查詢,如下:

public interface ClazzRepository extends JpaRepository<Clazz,Integer> {
}
@Test
void test03() {
List<Clazz> list = clazzRepository.findAll();
System.out.println("list = " + list);
}

如果在查詢的過程中,需要對學生進行排序,可以添加如下屬性:

@Data
@Table(name = "t_clazz")
@Entity
public class Clazz {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer cid;
private String name;
@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@OrderBy("sid desc")
private List<Student> students;
}

通過 @OrderBy("sid desc") 可以設置查詢的 student 排序。


責任編輯:武曉燕 來源: 江南一點雨
相關推薦

2009-06-04 16:14:22

Hibernate一對Hibernate一對Hibernate多對

2009-09-22 09:55:58

Hibernate實例

2009-07-21 17:31:39

iBATIS一對多映射

2010-04-15 09:09:02

Hibernate

2023-06-12 08:09:01

FlaskSQLAlchemy

2020-02-12 11:34:56

架構平滑上云機房遷移

2011-03-25 10:49:30

Join一對多

2010-07-07 08:33:09

SQL Server學

2020-06-23 14:28:24

MySQL商品數據

2009-06-24 15:51:47

Entity Bean一對多映射

2012-03-21 11:43:41

JavaHibernate

2022-10-08 11:40:18

Receive阻塞Trigger

2009-06-04 10:34:19

Hibernate一對一對多關系配置

2009-06-03 16:27:27

Hibernate一對一關系

2009-06-03 16:18:16

Hibernate關系代碼實例

2012-02-08 13:34:08

HibernateJava

2019-05-12 14:10:07

物聯網DDOS網絡攻擊

2009-08-17 10:34:51

NHibernate一

2009-06-26 10:15:54

面試HR

2009-09-23 10:37:50

Hibernate一對
點贊
收藏

51CTO技術棧公眾號

国产系列在线观看| 国产成人在线观看网站| 国产精品亚洲欧美日韩一区在线| 一区二区三区日韩欧美精品| 国产精品12| 天堂网免费视频| 亚洲国产成人精品女人| 亚洲成人精品av| 男操女免费网站| 18网站在线观看| 91看片淫黄大片一级在线观看| 国产精品视频白浆免费视频| 国产亚洲精品久久久久久无几年桃| 最新亚洲精品| 欧美一级二级在线观看| 一本久道中文无码字幕av| 91黄色在线| 中文字幕欧美三区| 国产精品18毛片一区二区| 中国一级特黄视频| 99精品福利视频| 久久久精品视频在线观看| 久久久精品人妻无码专区| 国产精品成人**免费视频| 色综合咪咪久久| 国产在线xxxx| 欧美成人性生活视频| av电影在线观看一区| 91精品在线国产| 国产精品第六页| 99riav1国产精品视频| 久久亚洲影音av资源网 | 亚洲福利视频久久| 日本人69视频| 精品日韩视频| 亚洲成人av免费| 亚洲精品免费在线看| 污污视频在线观看网站| 国产福利一区二区三区视频在线 | 一区二区自拍偷拍| 天堂久久久久va久久久久| 午夜精品蜜臀一区二区三区免费| 美女的奶胸大爽爽大片| 天堂网在线观看国产精品| 有码中文亚洲精品| 伊人网伊人影院| 精品一区亚洲| 亚洲毛片一区二区| 北岛玲一区二区| 色天天色综合| 日韩毛片中文字幕| 精品国产av色一区二区深夜久久 | 日韩av在线直播| 午夜av免费看| 免费成人蒂法| 亚洲精品美女在线观看播放| 在线观看亚洲免费视频| aiai久久| 亚洲精品自拍视频| 免费的av网站| 怕怕欧美视频免费大全| 亚洲网站在线看| 欧美激情视频二区| 欧美hd在线| 日韩在线观看高清| 91传媒免费观看| 综合天堂久久久久久久| 欧美激情精品久久久久久变态| 久久久久成人片免费观看蜜芽| 91精品亚洲| 欧美黄色性视频| 国产精品30p| 国产一区二区你懂的| 国产成人精品电影| 亚洲国产无线乱码在线观看| 美国十次了思思久久精品导航| 成人疯狂猛交xxx| 精品乱子伦一区二区| 国产成人8x视频一区二区| 精品国产乱码久久久久久108| 午夜视频福利在线观看| 国产欧美日韩一区二区三区在线观看 | 中日韩美女免费视频网站在线观看| 成人无码av片在线观看| 国产精品久久观看| 久久久视频在线| 青青视频在线免费观看| 久久se精品一区二区| 成人高清在线观看| 午夜影院在线视频| 国产精品久久久久国产精品日日| 日韩中文在线字幕| 国产直播在线| 欧美日韩国产在线观看| 又色又爽又黄18网站| 亚洲人成网站77777在线观看| 中文字幕在线看视频国产欧美在线看完整 | 性高湖久久久久久久久| 国产又爽又黄的激情精品视频| 国产超碰人人模人人爽人人添| 972aa.com艺术欧美| 亚洲精品久久久久久一区二区| 人人超在线公开视频| 欧美天堂在线观看| 中文字幕欧美视频| 国产一区二区三区电影在线观看 | 亚洲视频在线二区| 波多野结衣在线高清| 欧美视频精品在线| 中文文字幕文字幕高清| 91精品福利| 国产成人亚洲综合| 人妻一区二区三区| 自拍偷在线精品自拍偷无码专区| 精品一卡二卡三卡| 亚洲一二av| 日韩视频永久免费观看| 狠狠人妻久久久久久综合| 国产精品一区二区在线观看网站| 日韩精品一区二区三区色偷偷| 韩国日本一区| 91精品国产乱| 91av手机在线| 奇米色一区二区三区四区| 久久国产精品亚洲va麻豆| 2024最新电影在线免费观看| 欧美日韩夫妻久久| 极品蜜桃臀肥臀-x88av| 久久九九免费| 麻豆精品蜜桃一区二区三区| av老司机免费在线| 日韩欧美国产综合| www.超碰在线观看| 精品一区二区三区欧美| 亚洲精品永久www嫩草| 奇米777日韩| 亚洲欧美日韩视频一区| 欧美啪啪小视频| av中文字幕不卡| 妞干网视频在线观看| 精品一区视频| 久久国产加勒比精品无码| 夜夜嗨aⅴ一区二区三区| 日本一区二区免费在线观看视频 | 中文在线第一页| av男人天堂一区| www国产精品内射老熟女| 久久精品国产亚洲5555| 97婷婷涩涩精品一区| 神马午夜电影一区二区三区在线观看| 亚洲国产视频一区二区| 亚洲成a人无码| 亚洲天堂成人| 国产美女精品久久久| 97人人在线视频| 亚洲国产成人精品女人久久久 | 欧美揉bbbbb揉bbbbb| 亚洲色图 激情小说| 麻豆精品一区二区三区| 成人手机视频在线| 国产一区一区| 国产做受高潮69| 色资源在线观看| 91豆麻精品91久久久久久| 国产精品20p| 久久精品久久久精品美女| 最新av在线免费观看| 亚洲网址在线观看| 欧美一级视频免费在线观看| 久久天堂电影| 欧美少妇性性性| 免费在线视频一区二区| 91蜜桃视频在线| 天天干在线影院| 中文在线日韩| 精品亚洲欧美日韩| 成人毛片免费| 欧美精品在线免费| 青青草视频在线观看| 欧美调教femdomvk| 久久精品一级片| 91美女在线观看| 五月激情婷婷在线| 韩日精品视频| 视频一区视频二区视频| 香蕉大人久久国产成人av| 97超碰色婷婷| 日本在线视频观看| 日韩欧美一级二级| 久久精品女人毛片国产| 久久女同精品一区二区| 亚洲这里只有精品| 欧美高清不卡| 久久国产精品久久精品国产| 亚洲国产aⅴ精品一区二区三区| 九九热99久久久国产盗摄| 日本黄色三级视频| 欧美日韩国产乱码电影| 国产成人无码精品久在线观看| 欧美激情自拍偷拍| 中文字幕免费在线播放| 久久黄色级2电影| 久久久免费视频网站| 羞羞答答成人影院www| 好吊妞www.84com只有这里才有精品 | 双性尿奴穿贞c带憋尿| 国模无码大尺度一区二区三区| 黄页网站大全在线观看| 久久久久亚洲| 神马欧美一区二区| 国产精品45p| 成人羞羞国产免费| 天堂久久午夜av| 88xx成人精品| 欧美高清另类hdvideosexjaⅴ| 中文字幕视频在线免费欧美日韩综合在线看| 亚洲精品第五页| 欧美军同video69gay| 激情网站在线观看| 欧美日韩国产影院| 日韩av女优在线观看| 亚洲精品中文在线影院| 一本在线免费视频| 91色视频在线| 少妇被狂c下部羞羞漫画| 国产在线精品不卡| 国产色视频在线播放| 久久天天综合| 国产免费黄视频| 日韩一级欧洲| 国内精品在线观看视频| 韩日成人av| 男人的天堂avav| 欧美黄色aaaa| 天堂а√在线中文在线| 亚洲精品极品少妇16p| 亚洲人一区二区| 国内成人精品| 日本一区二区视频| 国产剧情在线观看一区| 欧美日韩一区在线观看视频| 五月激激激综合网色播| 欧美极品色图| 国内精品久久久久久久影视简单 | av片在线观看| 蜜月aⅴ免费一区二区三区| 成人免费网址| 精品自在线视频| 亚洲图区一区| 高清欧美电影在线| 免费h视频在线观看| 5252色成人免费视频| 人人视频精品| 国产精品爽爽爽| 豆花视频一区| 国产精品久久波多野结衣| 青青草原在线亚洲| 日本午夜精品电影| 日韩欧美视频| 欧美日韩dvd| 精品成人一区| 日本www在线播放| 日韩高清一级片| 午夜剧场高清版免费观看| 国内成人免费视频| 国产二级一片内射视频播放 | 久久久久久久久一区二区| 五月天亚洲色图| 一本一道久久久a久久久精品91| 99久久视频| 天堂а√在线中文在线| 99国产精品久久久久久久| 韩国视频一区二区三区| 国产专区综合网| 理论片大全免费理伦片| 久久精品亚洲乱码伦伦中文 | 成人福利网站在线观看| 亚洲小说春色综合另类电影| 久久亚洲国产精品日日av夜夜| 欧美三级伦理在线| 欧洲金发美女大战黑人| 亚洲欧美日韩国产一区二区| www.这里只有精品| 成人午夜电影网站| 亚洲国产日韩一区无码精品久久久| 国产精品久久毛片av大全日韩| 青青草手机在线视频| 欧美性猛交xxxx黑人| 国产欧美第一页| 精品丝袜一区二区三区| 成人短视频在线观看| 91精品国产高清自在线看超| 欧洲午夜精品| 久久99精品久久久久久青青日本| 欧美第一精品| 日韩少妇内射免费播放| 九一久久久久久| 黄色短视频在线观看| 国产精品理论在线观看| www.国产成人| 91精品国产综合久久国产大片| 青青草在线免费视频| 久久91超碰青草是什么| 成人av色网站| 激情视频在线观看一区二区三区| 四虎成人av| 久久人妻精品白浆国产| 国产成人av电影在线播放| 国产又粗又猛又爽又黄的视频四季 | 国产精品18久久久久| 亚洲欧美va天堂人熟伦| 精品福利在线视频| 精品久久久无码中文字幕| 主播福利视频一区| 在线毛片观看| 国产精品久久一区二区三区| 亚洲一级淫片| 九色porny自拍| 国产日韩精品一区二区三区在线| 久草免费在线视频观看| 91精品国产综合久久久久久久久久| 理论在线观看| 国产91精品高潮白浆喷水| 一区二区亚洲视频| 欧美 国产 精品| 精品亚洲成a人| 色www亚洲国产阿娇yao| 色八戒一区二区三区| 毛片在线播放网站| 国模私拍视频一区| 伊人久久大香线蕉av超碰| 热久久最新地址| 国产又粗又猛又爽又黄91精品| 三级黄色录像视频| 欧美日韩精品免费| 又爽又大又黄a级毛片在线视频| 欧美中文字幕在线播放| 神马香蕉久久| 99爱视频在线| 91年精品国产| 特级毛片www| 日韩成人免费视频| 综合日韩av| 国产精品日韩欧美一区二区三区| 国产精品v日韩精品v欧美精品网站| 北条麻妃亚洲一区| 亚洲国产精品久久人人爱| 亚洲精品国产一区二| 久久久中精品2020中文| 欧美日韩破处| 又色又爽又高潮免费视频国产| 久久色中文字幕| 99re热视频| 久久精品国产清自在天天线| 精品91福利视频| 精品视频在线观看一区二区| 成人一区二区三区中文字幕| 久久露脸国语精品国产91| 日韩电影中文字幕一区| 国产乱码精品一区二三赶尸艳谈| 俄罗斯精品一区二区三区| 午夜日韩av| 中文字幕久久久久久久| 亚欧色一区w666天堂| 日韩二区三区| 国产福利精品在线| 希岛爱理av一区二区三区| 俄罗斯黄色录像| 亚洲国产一区视频| 青青国产在线| 成人黄色免费片| 伊人精品成人久久综合软件| 中文字幕5566| 欧美日韩国产免费一区二区 | 精品福利在线观看| av在线第一页| 成人性生交大片免费看视频直播| 亚洲精品小区久久久久久| 中文字幕 日韩 欧美| 亚洲一区在线电影| 国产中文字幕在线观看| 成人黄色免费片| 国产精品婷婷| 欧美特级一级片| 精品伊人久久97| 国产亚洲高清一区| 奇米精品一区二区三区| 99久久er热在这里只有精品15| 亚洲精品国产欧美在线观看| 欧美另类暴力丝袜| 国产一区二区三区精品在线观看| 一区二区三区四区五区精品 | 天堂av一区二区| 丁香啪啪综合成人亚洲小说 | 欧美日韩亚洲一区二区三区在线观看| 热久久国产精品| 免费在线视频观看| 日韩中文字幕在线视频| av中文字幕在线看| 中文精品视频一区二区在线观看|