当前位置: 代码迷 >> 综合 >> JPA@OnetoMany 实现联级操作
  详细解决方案

JPA@OnetoMany 实现联级操作

热度:55   发布时间:2023-12-18 10:06:29.0

表1 S_people id主键 与表2 S_card一对多

@Entity
@Table(name="s_people")
public class S_people {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@SequenceGenerator(name = "s_people_seq",sequenceName = "s_people_seq",allocationSize = 1)private int id;private String username;private String age;@OneToMany(cascade = CascadeType.ALL,fetch=FetchType.EAGER)// 创建中间表,存储映射关系@JoinTable(name="s_people_card",joinColumns={@JoinColumn(name="p_id")},inverseJoinColumns={@JoinColumn(name="c_id")})private List<S_card> cards;public int getId() {return id;}public void setId(int 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;}public List<S_card> getCards() {return cards;}public void setCards(List<S_card> cards) {this.cards = cards;}
}

表2

@Entity
@Table(name="s_card")
public class S_card {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@SequenceGenerator(name = "s_card_seq",sequenceName = "s_card_seq",allocationSize = 1)private int id;private String num;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getNum() {return num;}public void setNum(String num) {this.num = num;}
}

JPA运行是会自动根据表一@JoinTable()里的内容建立s_people_card表,里面存放的是两张表段的id用以表示关联

联级完成,
相关联级使用得controller

@ApiOperation(value = "JPA联级OTM插入测试", notes = "JPA联级OTM插入测试")@PostMapping(value = "OMtest")public ResponseEntity<Map> OTMJPAInsert() {S_card c1 = new S_card();c1.setNum("1");S_card c2 = new S_card();c2.setNum("2");S_people s = new S_people();s.setAge("2");s.setUsername("2");List<S_card> l = new ArrayList<>();l.add(c1);l.add(c2);s.setCards(l);try {omPeopleRepository.saveAndFlush(s);} catch (Exception e) {return ResponseEntity.ok(getPublicBackValueDir(false, new HashMap()));}return ResponseEntity.ok(getPublicBackValueDir(true, new HashMap()));}@ApiOperation(value = "JPA联级OTM删除测试", notes = "JPA联级OTM插入测试")@DeleteMapping(value = "OMDtest")public ResponseEntity<Map> OTMJPADelete(@ApiParam(name = "id") @RequestParam int id) {try {omPeopleRepository.deleteById(id);
//            omCardRepository.deleteById(id);
//            S_card s=new S_card();
//            s.setId(3);
//            s.setNum("888");
//            S_people p=new S_people();
//            p.setId(3);
//            p.setUsername("8");
//            p.setAge("7");
//            omCardRepository.saveAndFlush(s);
//            omPeopleRepository.saveAndFlush(p);} catch (Exception e) {return ResponseEntity.ok(getPublicBackValueDir(false, new HashMap()));}return ResponseEntity.ok(getPublicBackValueDir(true, new HashMap()));}@ApiOperation(value = "JPA联级OTM查询测试", notes = "JPA联级OTM查询测试")@GetMapping(value = "OMSelect")public ResponseEntity<Map> OTMJPASelect(@ApiParam(name = "id") @RequestParam int id) {List<S_people> list = omPeopleRepository.findAllById(id);Map<String, Object> result = new HashMap<>();if(list.isEmpty()){return ResponseEntity.ok(getPublicBackValueDir(false, result));}for (S_people p : list) {result.put("data", p);}return ResponseEntity.ok(getPublicBackValueDir(true, result));}

Repository

public interface OMCardRepository extends JpaRepository<S_card, Integer> {}

除了删除操作,分别对两张表单独进行修改操作都是被允许的