我有productcategories的列表,需要知道每个用户是否已查看它们,还需要知道每个用户已查看的每个productscategory总数。

简而言之,我需要保留以下内容的列表

  • 每个用户查看的产品(一旦用户查看了产品的配置文件,它将被添加到此列表中)
  • 每个用户查看的类别(一旦用户查看了类别的配置文件,它将被添加到此列表中)
  • 每个类别查看过的产品数量
    每个用户?

  • 我向Client类添加了两个成员变量,如下所示。
    我不确定它是否正确,其次,我不知道如何为每个用户查看每个类别的所有已查看产品的计数器。 (我知道我可以使用数据库的(COUNT)函数来检索它,但是我想知道是否还有其他有效的方法,而不是将此请求发送到数据库)。

    客户:
    @Entity
    public class Client {
      @Id
      @GeneratedValue
      private long id;
    
      @OneToOne
      private List<Product> viewedProducts = new ArrayList<Product>(); //keep list of viewed products
    
      @OneToOne
      private List<Category> viewedCategories = new ArrayList<Category>(); //keep list of viewed categories
    
      ....
    }
    

    产品
    @Entity
    public class Product {
    
      @Id
      @GeneratedValue
      private long id;
    
      @ManyToOne(cascade = CascadeType.ALL)
      private Category category;
    
      ....
    }
    

    类别
    @Entity
    public class Category {
      @Id
      @GeneratedValue
      private long id;
    
      ....
    }
    

    最佳答案

    我的建议是保留您当前拥有的那些成员变量,并将以下内容添加到您的 class 中

       @OneToMany
       private List<ViewedProductsPerCategory> =
                                        new ArrayList<ViewedProductsPerCategory>();
    

    在那个班上你应该有
    @Entity
    public class ViewedProductsPerCategory {
       @Id
       @GeneratedValue
       long id;
    
       @OneToMany
       Category category;
    
       long CatCounter;
    
       long ProCounter;
    
       getters and setters;
    }
    

    但是请确保每次用户访问产品或类别时都将计数器保留在cookie中,而不是调用数据库。用户注销后,将cookie中的数字添加到数据库中的相应计数器。

    问题:请注意,用户可能会在注销之前删除cookie,尽管这种情况非常少见,因为大多数用户在登录时不会删除cookie以免注销。

    07-24 19:20
    查看更多