java - JPA:连接表语法

标签 java jpa

给定以下实体(为简洁起见,此长定义中省略了一些列):

@Table(name = "Products")
public class Products implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "SKU")
    private String sku;
    @Basic(optional = false)
    @Column(name = "ProductName")
    private String productName;

    private boolean allowPreOrder;
    @ManyToMany(mappedBy = "productsCollection")
    private Collection<Categories> categoriesCollection;
    @JoinTable(name = "Products_CrossSell", joinColumns = {
        @JoinColumn(name = "SKU", referencedColumnName = "SKU")}, inverseJoinColumns = {
        @JoinColumn(name = "CrossSKU", referencedColumnName = "SKU")})
    @ManyToMany
    private Collection<Products> productsCollection;
    @ManyToMany(mappedBy = "productsCollection")
    private Collection<Products> productsCollection1;
    @JoinTable(name = "Products_Related", joinColumns = {
        @JoinColumn(name = "SKU", referencedColumnName = "SKU")}, inverseJoinColumns = {
        @JoinColumn(name = "RelatedSKU", referencedColumnName = "SKU")})
    @ManyToMany
    private Collection<Products> productsCollection2;
    @ManyToMany(mappedBy = "productsCollection2")
    private Collection<Products> productsCollection3;

如何获取给定产品 SKU 的一组相关产品?

products_related 表如下所示:

alt text

我知道如何使用 SQL 获得答案,但我是 JPA 的新手,所以我还没有完全理解 API 和查询语法。

最佳答案

在我看来,定义了一些不必要的集合。无论如何:

@JoinTable(name = "Products_Related", joinColumns = {
    @JoinColumn(name = "SKU", referencedColumnName = "SKU")}, inverseJoinColumns = {
    @JoinColumn(name = "RelatedSKU", referencedColumnName = "SKU")})
@ManyToMany
private Collection<Products> productsCollection2;

这部分(它存在于您的代码中)应该会为您提供所需的产品。只需将其重命名为 relatedProducts,以及相应的 setter/getter。

更新:您可以通过以下方式获取对象:

Product p = entityManager.find(Product.class, yourProductId);
p.getRelatedProducts();

获取实体管理器取决于您的设置,一个更好的查找如何获取它的地方是教程。

关于java - JPA:连接表语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4180905/

相关文章:

java - 套接字上的 InputStreamReader 未完全读取 POST 请求

java - 查找整数的所有因式分解的算法

java - 如何使用 Elasticsearch 的 java api 调用 Groovy 脚本

hibernate - java.lang.IllegalArgumentException : Failed to create query method in a JpaRepository 异常

java - 使用纯 JPA 和 Spring 在 View 中打开 session - 而不是 Hibernate session

java - 如何创建跨服务域模型映射?

java - 使用 PowerMockito 模拟并验证同一类中的 2 个方法 public static void 和 public static boolean

java - Spring JNDIDataSourceLookup 无法在 Glassfish 中查找 JNDSI 数据源?

Spring Boot - 在 Hibernate 中使用 JPA 存储库

java - 从蓝牙设备读取数据时缓冲区缓慢