spring - 如何通过第三个链接两个表?
问题描述
我有三张桌子:
1) book: id (primary), name
2) shop:代码(唯一的,不是主要的),名称
3) book_shop: book_id, shop_id (code), price
我想在书上找到商店
book.getShop();
如何链接这些实体?
我试过了:
@Data
@NoArgsConstructor
@Entity
@Table(name = "book", schema = "example")
@EntityListeners(AuditingEntityListener.class)
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@OneToMany(mappedBy = "book", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<BookShop> bookShop;
}
.
@Data
@NoArgsConstructor
@Entity
@Table(name = "shop", schema = "example")
@EntityListeners(AuditingEntityListener.class)
public class Shop {
@Id
private int code;
private String name;
@OneToMany(mappedBy = "shop", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<BookShop> bookShop;
}
.
@Data
@NoArgsConstructor
@Entity
@Table(name = "book_shop", schema = "example")
public class BookShop implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Id
@ManyToOne
@JoinColumn(name = "book_id")
private Book book;
@Id
@ManyToOne
@JoinColumn(name = "shop_id")
private Shop shop;
@Column(name = "price")
private int fromDate;
}
此代码返回空集: Book book = bookRepostiory.getById(1).get().getBookShop()
解决方案
尝试多对多映射工具,如下所示删除您的 book_shop 表,
将此代码添加到商店实体,
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
@JoinTable(name = "book_shop",
joinColumns = {@JoinColumn(name = "book_id", nullable = false)},
inverseJoinColumns = {@JoinColumn(name = "shop_id", nullable = false)})
private Set<Book> bookList = null;
将此代码添加到预订实体,
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL,
mappedBy ="bookList")
private Set<Shop> shopList=null;
如有问题请告知!!
推荐阅读
- python-3.x - 无法使用 Python 显示散景图
- delphi - 为什么不按alt键的快捷方式
- typescript - 重命名从 TypeScript 内部库隐式导入的符号
- azure - 如何在 Azure 中对 SQL 数据库资源进行可用性测试?
- r - 用于多行数据的 ggplot 线图 - 与 matplot 等效的 ggplot
- excel - 切片器更改时运行宏
- macos - 为什么我无法在 macOS 上更改环境变量 $USERNAME?
- c++ - 如何提取将使用 clang 生成的所有符号?
- javascript - Select2:为什么复制的代码演示不起作用?
- java - 从数组中查找元素的最大长度