JPA中的一对多关系

order.java

 1 import java.util.hashset;
 2 import java.util.set;
 3 
 4 import javax.persistence.cascadetype;
 5 import javax.persistence.column;
 6 import javax.persistence.entity;
 7 import javax.persistence.fetchtype;
 8 import javax.persistence.id;
 9 import javax.persistence.onetomany;
10 import javax.persistence.table;
11 
12 @entity
13 @table(name="orders")
14 public class order {
15     @id
16     private string orderid;
17     @column(nullable=false)
18     private float amount=0f;
19     @onetomany(cascade=cascadetype.all,fetch=fetchtype.lazy,mappedby="order")
20     private set<orderitem> items=new hashset<orderitem>();
21     public string getorderid() {
22         return orderid;
23     }
24     public void setorderid(string orderid) {
25         this.orderid = orderid;
26     }
27     public float getamount() {
28         return amount;
29     }
30     public void setamount(float amount) {
31         this.amount = amount;
32     }
33     public set<orderitem> getitems() {
34         return items;
35     }
36     public void setitems(set<orderitem> items) {
37         this.items = items;
38     }
39     
40 }

orderitem.java

 1 import javax.persistence.cascadetype;
 2 import javax.persistence.column;
 3 import javax.persistence.entity;
 4 import javax.persistence.generatedvalue;
 5 import javax.persistence.id;
 6 import javax.persistence.joincolumn;
 7 import javax.persistence.manytoone;
 8 
 9 @entity
10 public class orderitem {
11     @id
12     @generatedvalue
13     private integer id;
14     @column(length=40,nullable=false)
15     private string productname;
16     @column(nullable=false)
17     private float price=0f;
18     @manytoone(cascade={cascadetype.merge,cascadetype.refresh},optional=false)
19     @joincolumn(name="order_id")
20     private order order;
21     public integer getid() {
22         return id;
23     }
24     public void setid(integer id) {
25         this.id = id;
26     }
27     public string getproductname() {
28         return productname;
29     }
30     public void setproductname(string productname) {
31         this.productname = productname;
32     }
33     public float getprice() {
34         return price;
35     }
36     public void setprice(float price) {
37         this.price = price;
38     }
39     public order getorder() {
40         return order;
41     }
42     public void setorder(order order) {
43         this.order = order;
44     } 
45     
46 }


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
一对多指的是一个实体类拥有多个关联实体类的关系。在Spring Data JPA,实现一对多关系需要在实体类使用注解来表示关系。 1. 定义实体类 在一对多关系,需要定义两个实体类,一个代表主实体类,一个代表子实体类。 主实体类: ```java @Entity public class Student { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "student", cascade = CascadeType.ALL, orphanRemoval = true) private List<Course> courses = new ArrayList<>(); } ``` 子实体类: ```java @Entity public class Course { @Id @GeneratedValue private Long id; private String name; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "student_id") private Student student; } ``` 在主实体类`Student`,使用`@OneToMany`注解定义了与子实体类`Course`的一对多关系。`mappedBy`属性指定了关系的反向属性为子实体类`Course`的`student`属性。`cascade`属性为级联操作,包括插入、更新和删除。`orphanRemoval`属性为关系的孤儿对象删除,即当主实体类的某个关联子实体类被删除时,该实体类也会被删除。 在子实体类`Course`,使用`@ManyToOne`注解定义与主实体类`Student`的多对一关系。`fetch`属性为数据抓取策略的定义,`JOIN`表示与主实体类同时查询,`LAZY`表示需要查询时才查询。`@JoinColumn`注解用来定义外键属性,`name`属性为关联主实体类的属性名。 2. 定义数据访问接口 定义数据访问接口`StudentRepository`: ```java public interface StudentRepository extends JpaRepository<Student, Long> { } ``` 3. 使用数据访问接口 ```java @Autowired private StudentRepository studentRepository; @Transactional public void test() { Student student = new Student(); student.setName("张三"); Course course1 = new Course(); course1.setName("语文"); course1.setStudent(student); Course course2 = new Course(); course2.setName("数学"); course2.setStudent(student); student.getCourses().add(course1); student.getCourses().add(course2); studentRepository.save(student); Student savedStudent = studentRepository.findById(student.getId()).get(); System.out.println(savedStudent.getCourses().size()); // 2 savedStudent.getCourses().remove(course1); studentRepository.save(savedStudent); Student updatedStudent = studentRepository.findById(student.getId()).get(); System.out.println(updatedStudent.getCourses().size()); // 1 } ``` 使用事务向数据库插入数据,查询实体类时,使用`get()`方法。通过关联实体类的属性进行操作,调用`save()`方法持久化数据。查询实体类后,使用集合的`remove()`方法从关联实体类删除对象,再调用`save()`方法更新数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值