文章目录
映射关系1.单向多对一 @ManyToOne2 单向一对多 @OneToMany3 双向多对一4 双向一对一5 双向多对多 @ManyToMany
映射关系
1.单向多对一 @ManyToOne
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
@Entity
@Table(name
="tb_person")
public class Person {
@Id
@GeneratedValue
private Integer pid
;
private String pname
;
}
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
@Entity
@Table(name
="tb_book")
public class Book {
@Id
@GeneratedValue
private Integer bid
;
private String bname
;
@JoinColumn(name
="p_id")
@ManyToOne(fetch
=FetchType
.LAZY
)
private Person person
;
}
@Test
public void testManyToOnePersist(){
Person person
= new Person();
person
.setPname("mmm");
Book book
= new Book();
book
.setBname("book");
Book book1
= new Book();
book
.setBname("book1");
book
.setPerson(person
);
book1
.setPerson(person
);
entityManager
.persist(person
);
entityManager
.persist(book
);
entityManager
.persist(book1
);
}
@Test
public void testManyToOneRemove(){
Person person
= entityManager
.find(Person
.class, 8);
entityManager
.remove(person
);
}
2 单向一对多 @OneToMany
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
@Entity
@Table(name
="tb_person")
public class Person {
@Id
@GeneratedValue
private Integer pid
;
private String pname
;
@JoinColumn(name
="p_id")
@OneToMany(fetch
=FetchType
.LAZY
)
private Set
<Book> books
= new HashSet<>();
}
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
@Entity
@Table(name
="tb_book")
public class Book {
@Id
@GeneratedValue
private Integer bid
;
private String bname
;
}
@Test
public void testOneToManyPersist(){
Person person
= new Person();
person
.setPname("onetomany");
Book book
= new Book();
book
.setBname("book");
Book book1
= new Book();
book1
.setBname("book1");
person
.getBooks().add(book
);
person
.getBooks().add(book1
);
entityManager
.persist(person
);
entityManager
.persist(book
);
entityManager
.persist(book1
);
}
3 双向多对一
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
@Entity
@Table(name
="tb_person")
public class Person {
@Id
@GeneratedValue
private Integer pid
;
private String pname
;
@JoinColumn(name
="p_id")
@OneToMany(fetch
=FetchType
.LAZY
)
private Set
<Book> books
= new HashSet<>();
}
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
@Entity
@Table(name
="tb_book")
public class Book {
@Id
@GeneratedValue
private Integer bid
;
private String bname
;
@JoinColumn(name
="p_id")
@ManyToOne(fetch
=FetchType
.LAZY
)
private Person person
;
}
@Test
public void testOneToManyPersist(){
Person person
= new Person();
person
.setPname("onetomany");
Book book
= new Book();
book
.setBname("book");
Book book1
= new Book();
book1
.setBname("book1");
person
.getBooks().add(book
);
person
.getBooks().add(book1
);
book
.setPerson(person
);
book1
.setPerson(person
);
entityManager
.persist(book
);
entityManager
.persist(book1
);
entityManager
.persist(person
);
entityManager
.persist(person
);
entityManager
.persist(book
);
entityManager
.persist(book1
);
}
4 双向一对一
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
@Entity
@Table(name
="tb_person")
public class Person {
@Id
@GeneratedValue
private Integer pid
;
private String pname
;
@OneToOne(mappedBy
="person")
private Book book
;
}
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
@Entity
@Table(name
="tb_book")
public class Book {
@Id
@GeneratedValue
private Integer bid
;
private String bname
;
@JoinColumn(name
="p_id", unique
=true)
@OneToOne(fetch
=FetchType
.LAZY
)
private Person person
;
}
@Test
public void testOneToOnePersistence(){
Person person
= new Person();
person
.setPname("one");
Book book
= new Book();
book
.setBname("toone");
person
.setBook(book
);
book
.setPerson(person
);
entityManager
.persist(person
);
entityManager
.persist(book
);
}
外键在book表里维护
5 双向多对多 @ManyToMany
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
@Entity
@Table(name
="tb_person")
public class Person {
@Id
@GeneratedValue
private Integer pid
;
private String pname
;
@ManyToMany(mappedBy
="persons")
private Set
<Book> books
= new HashSet<>();
}
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
@Entity
@Table(name
="tb_book")
public class Book {
@Id
@GeneratedValue
private Integer bid
;
private String bname
;
@JoinTable(name
="person_book",
joinColumns
={@JoinColumn(name
="book_id", referencedColumnName
="bid")},
inverseJoinColumns
={@JoinColumn(name
="person_id", referencedColumnName
="pid")})
@ManyToMany
private Set
<Person> persons
= new HashSet<>();
}
@Test
public void testManyToManyPersist(){
Person person
= new Person();
person
.setPname("P1");
Person person2
= new Person();
person2
.setPname("P2");
Book book
= new Book();
book
.setBname("B1");
Book book2
= new Book();
book2
.setBname("B2");
person
.getBooks().add(book
);
person
.getBooks().add(book2
);
person2
.getBooks().add(book
);
person2
.getBooks().add(book2
);
book
.getPersons().add(person
);
book
.getPersons().add(person2
);
book2
.getPersons().add(person
);
book2
.getPersons().add(person2
);
entityManager
.persist(person
);
entityManager
.persist(person2
);
entityManager
.persist(book
);
entityManager
.persist(book2
);
}
多对多,会产生一个中间表
转载请注明原文地址:https://ipadbbs.8miu.com/read-58116.html