Hibernate之mappedBy

來源:互聯網
上載者:User

標籤:

Hibernate之mappedBy

摘要:   一。mappedBy單向關係不需要設定該屬性,雙向關係必須設定,避免雙方都建立外鍵欄位   資料庫中1對多的關係,關聯關係總是被多方維護的即外鍵建在多方,我們在單方對象的@OneToMany(ma.........

  一。mappedBy 單向關係不需要設定該屬性,雙向關係必須設定,避免雙方都建立外鍵欄位

  資料庫中1對多的關係,關聯關係總是被多方維護的即外鍵建在多方,我們在單方對象的@OneToMany(mappedby=" ")

  把關係的維護交給多方對象的屬性去維護關係

  對於mappedBy複習下:

  a) 只有OneToOne,OneToMany,ManyToMany上才有mappedBy屬性,ManyToOne不存在該屬性;

  b) mappedBy標籤一定是定義在the owned side(被擁有方的),他指向theowning side(擁有方);

  c) 關係的擁有方負責關係的維護,在擁有方建立外鍵。所以用到@JoinColumn

  d)mappedBy跟JoinColumn/JoinTable總是處於互斥的一方

  二。下面是我自己的理解,一直對hibernate中的維護關聯關係不太瞭解,總不知道他們具體指的是什麼

  這裡的維護關聯關係,拿多對多來說就是中間表,在不設定cascade的情況下,中間表由負責維護關聯關係的一方維護

  舉例說明:

  Game 和User  兩個實體類,他們是多對多的關係,有中間表t_game-user.

  在User中配置有:

  @ManyToMany(mappedBy="users")

  public List<Game> getGames() {

  return games;

  }

  Game中配置有:

  @ManyToMany

  @JoinTable(name = "t_game_user",

  joinColumns = {@JoinColumn(name = "game_id",referencedColumnName="gameId")},

  inverseJoinColumns = {@JoinColumn(name = "user_id",referencedColumnName="id")})

  public List<User> getUsers() {

  return users;

  }

  所以說由Game來維護他們的關聯關係,即中間表

  表現形式:

  1.因為沒有配置cascade所以分別給Game,User添加4條資料,然後手動在中間表中添加他們的關聯關係

  2.在程式中執行刪除User,

  Hibernate: delete from t_user where id=?

  Hibernate: delete from t_user where id=?

  Hibernate: delete from t_user where id=?

  Hibernate: delete from t_user where id=?

  刪除了User,並沒有對中間表發生影響

  3.在程式中執行刪除Game

  Hibernate:delete from t_game_user where game_id=?

  Hibernate:delete from t_game_user where game_id=?

  Hibernate:delete from t_game_user where game_id=?

  Hibernate:delete from t_game_user where game_id=?

  Hibernate:delete from t_game where game_id=?

  Hibernate:delete from t_game where game_id=?

  Hibernate:delete from t_game where game_id=?

  Hibernate:delete from t_game where game_id=?

  對中間表產生了影響,說明是Game在維護他們之間的關聯關係

  三。下面這裡是一對多的維護關聯關係,(同樣是在部設定cascade的前提下)一對多的關聯關係其實更簡單,因為他們之間沒有中間表,User和Group,他們的關聯關係就是體現在one方(group)的主鍵是Many方(User)的外鍵,這個關聯關係就在User的表中。因為有外鍵的存在,group在user刪除之前,是不能夠刪除的,所以他們之間維護關聯關係的任務就只能交給Many方(User)



來自為知筆記(Wiz)

Hibernate之mappedBy

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.