天天看點

Hibernate中Many的屬性mappedBy小結

對于mappedBy小結

======引用網上:

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

b) mappedBy标簽一定是定義在the owned side(被擁有方的),他指向the owning side(擁有方);

c) mappedBy的含義,應該了解為,擁有方能夠自動維護 跟被擁有方的關系; 

   當然,如果從被擁有方,通過手工強行來維護擁有方的關系也是可以做到的。

d) mappedBy跟JoinColumn/JoinTable總是處于互斥的一方,可以了解為正是由于擁有方的關聯被擁有方的字段存在,擁有方才擁有了被 擁有方。mappedBy這方定義的JoinColumn/JoinTable總是失效的,不會建立對應的字段或者表

======

附加:

有兩個類(兩張表)Group和User,一個組中可以有多個使用者,一個使用者隻屬于一個組,ManyToOne;

兩個類中代碼如下:

Group類中 User類中

@Entity

@Table(name="t_Group")

public class Group {

private int id;

private String name;

private Set<User> users = new HashSet<User>();

@Id

@GeneratedValue

public int getId() {

return id;

}

public String getName() {

return name;

}

@OneToMany(mappedBy="group")

public Set<User> getUsers() {

return users;

}

public void setId(int id) {

this.id = id;

}

public void setName(String name) {

this.name = name;

}

public void setUsers(Set<User> users) {

this.users = users;

}

}

@Entity

@Table(name="t_User")

public class User {

private int id;

private String name;

private Group group;

@ManyToOne

public Group getGroup() {

return group;

}

@Id

@GeneratedValue

public int getId() {

return id;

}

public String getName() {

return name;

}

public void setGroup(Group group) {

this.group = group;

}

public void setId(int id) {

this.id = id;

}

public void setName(String name) {

this.name = name;

}

}

@OneToMany(mappedBy="group")

public Set<User> getUsers() {

return users;

}

結果如下:

 drop table if exists t_Group

    drop table if exists t_User

    create table t_Group (

        id integer not null auto_increment,

        name varchar(255),

        primary key (id)

    )

    create table t_User (

        id integer not null auto_increment,

        name varchar(255),

        group_id integer,

        primary key (id)

    )

    alter table t_User 

        add index FKCB5540D6E7CDA67A (group_id), 

        add constraint FKCB5540D6E7CDA67A 

        foreign key (group_id) 

        references t_Group (id)

Hibernate: 

    insert 

    into

        t_Group

        (name) 

    values

        (?)

Hibernate: 

    insert 

    into

        t_User

        (group_id, name) 

    values

        (?, ?)

總結規律為:

凡是雙向關聯,必設MappedBy。

繼續閱讀