Java 一对多 和多对多

是一种典型的一对多的关系。

但是以上设计:解决了实体的设计表问题,但是没有解决关系问题,孩子找不到母亲,母亲也找不到孩子

解决方案:在某一张表中增加一个字段,能够找到另外一张表中的记录:在孩子表中增加一个字段

指向母亲表,因为孩子表的记录只能匹配到一条母亲表的记录。

母亲表:ID§,名字,年龄,性别

孩子表:ID§,名字,年龄,性别,母亲表ID(母亲表主键)

2.多对多的关系,是通过中间表。中间表是多的一方,所以多的一方要包含指向一的一方的外键。所以中间表,作为两边多的一方,中间表要包含两边的外键,两个外键分别指向两张表的主键。

多对多

一对表中(A)的一条记录能够对应另外一张表(B)中的多条记录;同时B表中的一条记录

也能对应A表中的多条记录

老师和学生

老师表 T_ID§,姓名,性别

学生表 S_ID§,姓名,性别

以上设计方案:实现了实体的设计,但是没有维护实体的关系

一个老师教过多个学生,一个学生也被多个老师教过

解决方案:增加一张中间关系表
老师与学生的关系表:ID§,T_ID,S_ID
老师表与中间表形成一对多的关系,而中间表是多表;维护了能够唯一找到一表的关系;
同样的学生表与中间表也是一个一对多的关系;
学生找老师:找出学生ID—>中间表寻找匹配记录(多条)—>老师表匹配(一条)

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

最后,强调几点:

  • 1. 一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你的简历来问的; 能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试之前好好回顾一下自己所做的项目;
  • 2. 和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的;
  • 3. 注意自己开源的Github项目,面试官可能会挖你的Github项目提问;

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目。

面试答案

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

三面头条+四面阿里+五面腾讯拿offer分享面经总结,最终入职阿里

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中…(img-KofOfn3R-1712848898543)]

  • 18
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的一对多查询通常是指一个实体类对应多个相关联的实体类。例如,一个订单(Order)可以对应多个订单详情(OrderDetail)。 实现一对多查询的方式有很多种,其中比较常见的方式是使用JPA(Java Persistence API)或Hibernate框架。下面以JPA为例,介绍一下如何实现一对多查询。 首先,我们需要定义两个实体类:Order和OrderDetail。Order类包含多个OrderDetail对象,因此在Order类中使用@OneToMany注解来定义关联关系: ``` @Entity public class Order { @Id private Long id; private String orderNo; @OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true) private List<OrderDetail> orderDetails; // getter和setter方法省略 } ``` 上面的代码中,@OneToMany注解表示一个订单可以包含多个订单详情,mappedBy属性指定了关联关系维护的是OrderDetail类中的order属性,cascade属性表示级联操作,orphanRemoval属性表示在删除订单时是否删除其对应的订单详情。 接下来,我们需要定义OrderDetail类,并在该类中使用@ManyToOne注解来定义与Order类的关联关系: ``` @Entity public class OrderDetail { @Id private Long id; private String productName; private BigDecimal price; @ManyToOne @JoinColumn(name = "order_id") private Order order; // getter和setter方法省略 } ``` 上面的代码中,@ManyToOne注解表示每个订单详情都属于一个订单,@JoinColumn注解指定了关联的外键列名为order_id。 最后,我们可以使用JPA提供的查询方法来实现一对多查询。例如,下面的代码可以查询id为1的订单及其对应的所有订单详情: ``` @Repository public interface OrderRepository extends JpaRepository<Order, Long> { @Query("select o from Order o left join fetch o.orderDetails where o.id = :id") Optional<Order> findByIdWithDetails(@Param("id") Long id); } ``` 上面的代码中,@Query注解表示使用JPQL(Java Persistence Query Language)查询语句,left join fetch语句表示使用左外连接查询,同时抓取Order对象的所有OrderDetail对象,@Param注解表示传入参数id。 以上就是使用JPA实现一对多查询的方法。当然,除了JPA之外,还有其他方式可以实现一对多查询,例如使用Hibernate框架或者手写SQL语句等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值