我有一个关于mysql java pojo的问题。我试图在一列中插入多个值。但是代码抛出了空值。这些sql查询不是在jpa上使用的,而是在r2dbc spring webflux上使用的。正如你所知道的,r2dbc驱动程序不支持表关系,所以我试图直接插入值到每个表中。首先我做了pojo代码。
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Table
public class Post {
@Id
@Column("post_id")
private Long postId;
@Column
private String title;
@Column
private String body;
@Column("tag_id")
private Collection<Long> tagId; // value of tagId is null
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Table
public class Tag {
@Id
@Column("tag_id")
private Long tagId;
@Column
private String body;
@Column("post_id")
private Long postId;
}
然后执行下面的SQL语句
CREATE TABLE IF NOT EXISTS post (
post_id BIGINT NOT NULL AUTO_INCREMENT,
title VARCHAR(30) NOT NULL,
body TEXT,
PRIMARY KEY (post_id)
);
CREATE TABLE IF NOT EXISTS tag (
tag_id BIGINT NOT NULL AUTO_INCREMENT,
body VARCHAR(255),
post_id BIGINT NOT NULL,
PRIMARY KEY (tag_id),
CONSTRAINT tag_ibfk_1 FOREIGN KEY (post_id) REFERENCES post (post_id) ON DELETE CASCADE
);
post和tag表的表关系是一对多,下面的代码是sql插入代码。
INSERT INTO post (post_id, title, body) VALUES (1, 2, 'Title 1', 'post #1 body');
INSERT INTO post (post_id, title, body) VALUES (2, 2, 'Title 2', 'post #2 body');
INSERT INTO tag (tag_id, post_id, body) VALUES (1, 1, 'first tag');
INSERT INTO tag (tag_id, post_id, body) VALUES (2, 1, 'second tag');
INSERT INTO tag (tag_id, post_id, body) VALUES (3, 2, 'third tag');
INSERT INTO tag (tag_id, post_id, body) VALUES (4, 2, 'last tag');
以上SQL语句在项目启动时执行,'post' java类的'tagId'成员变量为java Collection类型,即有多个标签值,但当React网响应返回时,标签值为空。
http://localhost:8080/route/post/all
[{"postId":1,"title":"Title 1","body":"post #1 body","tagId":null},{"postId":2,"title":"Title 2","body":"post #2 body","tagId":null}]
如何将标签类的多个tag_id值插入post.tagId?有什么想法吗?
1条答案
按热度按时间68bkxrlz1#
你不能在R2DBC中直接链接
tags
表。另一种方法是同时执行两个查询。由于我不知道你的端点是什么样子的,下面是我对它的实现:标签库:
后存储库:
然后,要获取posts标签,您可以在有post id的情况下一次执行两个查询:
在
Mono.zip
函数返回一个Tuple<List<Tag>, Post>
之后,你可以使用tuple.getT1()
来获取标签列表,使用tuple.getT2()
来获取帖子。