sping data jpa 多对多一对一 多对一 关系 管理

6 篇文章 0 订阅
1 篇文章 0 订阅

一、@OneToOne关系映射

JPA使用@OneToOne来标注一对一的关系。
这里用两种方式描述JPA的一对一关系。
一种是通过外键的方式(一个实体通过外键关联到另一个实体的主键);
另外一种是通过一张关联表来保存两个实体一对一的关系。
关联的实体的主键一般是用来做外键的。但如果此时不想主键作为外键,则需要设置referencedColumnName属性

二、@OneToMany 和 @ManyToOne

在JPA规范中,一对多的双向关系由多端来维护。就是说多端为关系维护端,负责关系的增删改查。一端则为关系被维护端,不能维护关系。
三、多对多 @ManyToMany
JPA中使用@ManyToMany来注解多对多的关系,由一个关联表来维护。这个关联表的表名默认是:主表名+下划线+从表名。(主表是指关系维护端对应的表,从表指关系被维护端对应的表)。这个关联表只有两个外键字段,分别指向主表ID和从表ID。字段的名称默认为:主表名+下划线+主表中的主键列名,从表名+下划线+从表中的主键列名。

需要注意的:

1、多对多关系中一般不设置级联保存、级联删除、级联更新等操作。

2、可以随意指定一方为关系维护端,

3、多对多关系的绑定由关系维护端来完成。关系被维护端不能绑定关系。

4、多对多关系的解除由关系维护端来完成。关系被维护端不能解除关系。

5、如果 User 和 Authority 已经绑定了多对多的关系,那么不能直接删除 Authority,需要由 User 解除关系后,才能删除 Authority。但是可以直接删除 User,因为 User 是关系维护端,删除 User 时,会先解除 User 和 Authority 的关系,再删除 Authority。

注意:
关于级联,一定要注意,要在关系的维护端,即 One 端。

比如 作者和文章,作者是One,文章是Many;文章和评论,文章是One,评论是Many。

cascade = CascadeType.ALL 只能写在 One 端,只有One端改变Many端,不准Many端改变One端。

特别是删除,因为 ALL 里包括更新,删除。

如果删除一条评论,就把文章删了,那算谁的。所以,在使用的时候要小心。一定要在 One 端使用。

注意 重写 实体的toString 方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为实现多人在线编辑表格,可以使用Spring Boot和WebSocket技术。具体实现步骤如下: 1.创建Spring Boot项目,并添加WebSocket依赖。 2.创建WebSocket配置类,实现WebSocketMessageBrokerConfigurer接口,并重写registerStompEndpoints()方法和configureMessageBroker()方法。 3.创建控制器类,处理WebSocket连接和消息。 4.创建前端页面,使用JavaScript和Stomp.js库实现WebSocket连接和消息发送。 下面是一个简单的示例代码,用于演示如何使用Spring Boot和WebSocket实现多人在线编辑表格: ```java // WebSocket配置类 @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/ws").withSockJS(); } @Override public void configureMessageBroker(MessageBrokerRegistry registry) { registry.enableSimpleBroker("/topic"); registry.setApplicationDestinationPrefixes("/app"); } } // WebSocket控制器类 @Controller public class WebSocketController { @MessageMapping("/edit") @SendTo("/topic/edit") public String edit(String message) { return message; } } <!-- 前端页面 --> <!DOCTYPE html> <html> <head> <title>在线编辑表格</title> <script src="/webjars/sockjs-client/1.0.2/sockjs.min.js"></script> <script src="/webjars/stomp-websocket/2.3.3/stomp.min.js"></script> <script> var stompClient = null; function connect() { var socket = new SockJS('/ws'); stompClient = Stomp.over(socket); stompClient.connect({}, function(frame) { console.log('Connected: ' + frame); stompClient.subscribe('/topic/edit', function(message) { console.log('Received: ' + message.body); // 处理接收到的消息 }); }); } function send(message) { stompClient.send('/app/edit', {}, message); } </script> </head> <body onload="connect()"> <!-- 表格内容 --> </body> </html> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值