当前位置: 代码迷 >> 综合 >> JPA 使用@OneToMany
  详细解决方案

JPA 使用@OneToMany

热度:1   发布时间:2023-12-12 02:27:17.0

一对多

一个人对多张卡,但是一张卡只能对应一个人,典型的一对多关系,下面就用OneToMany来自动生成sql语句

首先建表s_person和s_card表


s_card表


然后在创建一张表关联两张表的关系s_person_card,P_ID为s_person的id,C_ID为s_card的id



建Person.java实体类

@Entity
@Table(name="s_person")
public class Person {@GeneratedValue(generator = "uuid2")@GenericGenerator(name = "uuid2", strategy = "uuid2")@Idprivate String id;private String username;private String age;//JoinTable的name是中间表的名字@OneToMany(fetch=FetchType.EAGER)@JoinTable(name="s_person_card",joinColumns={@JoinColumn(name="p_id")},inverseJoinColumns={@JoinColumn(name="c_id")})private List<Cards> cards;public List<Cards> getCards() {return cards;}public void setCards(List<Cards> cards) {this.cards = cards;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}

然后是cards表

@Entity
@Table(name="s_card")
public class Cards {private String id;private String num;@GeneratedValue(generator = "uuid2")@GenericGenerator(name = "uuid2", strategy = "uuid2")@Idpublic String getId() {return id;}public void setId(String id) {this.id = id;}public String getNum() {return num;}public void setNum(String num) {this.num = num;}}

新建接口

public interface PersonRepository extends JpaRepository<Person, String>{Person findById(String id);}

测试

        @RequestMapping("/person")@ResponseBodypublic Person person(){Person person=personRepository.findById("12323423");List<Cards> cards = person.getCards();for (Cards card : cards) {System.out.println(card.getId());System.out.println(card.getNum());}return person;}


结果正常打印,发了两条sql语句,没有手动写sql


只是测试的onetomany,有点复杂,如果在cards类中添加用manytoone就不用创建中间表