java - 如何与 Spring 和 thymeleaf 创建一对多的关系?
问题描述
我想创建一个具有多个“标签”作为集合的“产品”类。所以一个一对多的数据库,而产品是“一”,标签是“多”。
标签将在 HTML 中定义为输入字段并以空格分隔。例如“tag1 tag2 tag3”。
我现在的问题是:如何从输入字段中检索字符串并将它们作为集合附加到我的产品对象中?
到目前为止我所拥有的:
产品
@Entity
public class Product {
@Id
@GeneratedValue
private int barcode;
public String name;
@OneToMany(mappedBy = "product", cascade = CascadeType.ALL)
private Collection<Tag> tags;
...Getter & Setter
标签
@Entity
public class Tag {
@Id
private String tagname;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "barcode", nullable = false)
private Product product;
...Getter & Setter
ProductsController:我尝试添加 Tag 对象作为测试,但会引发 Tag 表不存在的错误
@PostMapping("/add")
public String add(@Valid Product product, BindingResult result, Model model) {
model.addAttribute("responseMessage", result);
if(!result.hasErrors()) {
//I tried to add a static collection to the product object, but it throws errors
Collection<Tag> col = new ArrayList<>();
col.add(new Tag("test"));
col.add(new Tag("test2"));
product.setTags(col);
productRepository.save(product);
}
model.addAttribute("products",productRepository.findAll());
return "products-add";
}
解决方案
因为你有用空格分隔的标签。首先,您需要使用正则表达式制作一个标签字符串数组,如下所示。
String tags = "tag1 tag2 tag3";
String[] tagArr = tags.split("\\s+");
现在您需要创建一个存储库,如下所示。
@Repository
public interface TagRepository extends JpaRepository<Tag, Long> {
Tag findByTagname(String tagname);
}
为 TagService 创建一个接口。
public interface TagService {
Tag findByTagname(String tagname);
}
创建 TagService 类的实现
@Service
public class TagServiceImpl implements TagService{
@Autowired
private TagRepository tagRepository;
@Override
public Tag findByTagname(String tagname) {
return tagRepository.findByTagname(tagname);
}
}
现在按名称获取标签已完成。将您的 TagService 自动装配到您的控制器类中
@Autowire
private TagService tagService;
将以下代码添加到您的控制器。
String tags = "tag1 tag2 tag3";
String[] tagArr = tags.split("\\s+");
List<Tag> tagList = new ArrayList<Tag>();
for (String tagname : tagArr) {
Tag tag = tagService.findbyTagname(tagname);
tagList.add(tag);
}
现在,当您保存产品类别时。将此标签列表设置到您的它中。
推荐阅读
- node.js - 在单个 catch 块中捕获多个嵌套的异步函数错误
- node.js - HttpOnly Cookies 未设置为浏览器(laravel 客户端)
- javascript - 在构造函数中求和
- mysql - 是什么导致这个 Heroku mysql 连接错误?(尝试将前端连接到后端 POST 请求)
- python - Python 与 NetMiko。有没有办法在服务器上指定源接口(套接字)?
- javascript - 如何迭代 javascript 对象以使代码更好
- go - 有没有办法从 Clientset 获取 REST 配置?
- arrays - PowerShell 数组中单列的返回值
- javascript - html/js 如何询问用户在哪里下载文件
- java - Spring Boot 外部客户端的 DTO 数量