当前位置: 首页 > 知识库问答 >
问题:

正确使用单@ManyToOne关联进行大小控制和分页

佟阳焱
2023-03-14

我想避免“双向< code>@OneToMany”关联,因为:

  1. 它不能限制@OneTo众多
  2. 的大小
  3. 我需要分页。

为此,我使用了本教程,其中描述了“Just@ManyToOne”关联,但不幸的是,它只给出了一行与此相关的代码:

List<PostComment> comments = entityManager.createQuery(
    "select pc " +
    "from PostComment pc " +
    "where pc.post.id = :postId", PostComment.class)
.setParameter( "postId", 1L )
.getResultList();

所以,我有很多问题:

>

  • 我应该在哪里使用这条线?

    我应该如何以及在哪里获得EntityManager?到底在实体中?是一个好的解决方案吗?

    如何避免使用< code>EntityManager?我已经看了这个问题和其他问题,但不幸的是它们没有帮助我。

    我有Post作为父实体和Comment作为子实体。一个帖子可以有很多评论。代码

    如果我在< code >注释中使用它:

    @ManyToOne(fetch = FetchType.LAZY)   
    @JoinColumn(name = "post_id")  
    private Post post;  
    

    在< code>Post中:

    private Set<Comment> comments; 
    

    因此,我删除了<code>@OneToMany</code>正如上面提到的教程所说,我得到了:

    MappingException: Could not determine type for: java.util.List, at table: post, for columns: [org.hibernate.mapping.Column(comments)]
    

    那么,我如何使用“Just @ManyToOne”关联(或其他方便的东西)来控制评论的大小和分页?

  • 共有2个答案

    喻子航
    2023-03-14

    您可以通过使用Spring数据的JpaRepository来避免使用EntityManager。JpaRepository带有内置方法页面

    祝你好运

    编辑:另外,关于第4点:

    @ManyToOne(fetch = FetchType.LAZY)   
    @JoinColumn(name = "post_id")  
    private Post post; 
    

    在这里,你基本上是说一条评论可以有很多帖子,而不是反过来说(一条帖子可以有很多评论)。

    太叔望
    2023-03-14

    我找到了不完美,但对我来说最正确的解决方案。

    帖子:

    @Entity(name = "Post")
    public class Post {
    
        //...
        @Transient
        private List<PostComment> comments;
    
        public void addComment(PostComment comment) {
            comments.add(comment);
            comment.setPost(this);
        }
    
        public void removeComment(PostComment comment) {
            comments.remove(comment);
            comment.setPost(null);
        }
    
        public void clearComments(){
            comments.clear();
        }
    
        public List<PostComment> getComments() {
            return comments;
        }
    
        public void setComments(List<PostComment> comments) {
            this.comments = comments;
        }
    }
    

    后评论:

    @Entity(name = "PostComment")
    public class PostComment {
    
        //...
    
        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "post_id")
        private Post post;
    
        public Post getPost() {
            return post;
        }
    
        public void setPost(Post post) {
            this.post = post;
        }
    }
    

    PostCommentServiceImpl:

    @Service
    public class PostCommentServiceImpl {
    
        @Autowired
        private PostCommentRepository repository;
    
        //...
    
        public void setCommentsInPost(Post post, int first, int size){
            Pageable pageRequest = new PageRequest(first, size);
    
            Page<PostComment> pageOfPostComment = repository.findByPostId(post.getId(), pageRequest);
    
            post.setComments(pageOfPostComment.getContent());
        }
    }
    

    控制器:

    @Controller
    public class PostController {
        @Autowired
        private PostCommentService postCommentService;
    
        @Autowired
        private PostService postService;
    
        //...
        @RequestMapping(value = "/something", method = RequestMethod.GET)
        public void foo() {
            Post post = postService.findById(1L);
    
            postCommentService.setCommentsInPost(post,0,10);
    
            //...
        }
        //...
    }
    
     类似资料:
    • 问题内容: 我通过使用本教程学习Spring,Hibernate,Maven:Chad Lung:一个使用Netbeans 7,JUnit,Maven,HSQLDB,Spring和Hibernate的项目 。可以,但是我需要建立一对多关系(一个雇员有很多任务)。我已经尝试了许多示例,但仍然不知道如何使代码正常工作: Employee.java: Task.java: db-config.xml:

    • 关联分析 关联分析是一种在大规模数据集中寻找有趣关系的任务。 这些关系可以有两种形式: 频繁项集(frequent item sets): 经常出现在一块的物品的集合。 关联规则(associational rules): 暗示两种物品之间可能存在很强的关系。 相关术语 关联分析(关联规则学习): 从大规模数据集中寻找物品间的隐含关系被称作 关联分析(associati analysis) 或者

    • 我试图使用一个GridBagLayout有一个JFrame,其中包含一个具有网格布局的JPanel和一个只有一个大按钮的JPanel。我希望所有的行都是相同的大小,并且带有JButton的JPanel与一行的大小相同。然而,按钮面板目前是空的,大约是JFrame的1/3。我不太确定发生了什么,但是维护这个结构对我来说非常重要,因为我的代码的其余部分都使用了这个结构。任何帮助都很感激,并提前感谢您。

    • 我煞费苦心地创建了一个搜索图标,并将其导出为svg。这现在出现在一个网站的标题上,但我正试图让css控制它的大小和颜色,这样我就可以相应地调整图标的大小,匹配网站上文本的颜色,并且当用户滚动图标时,还会有某种滚动颜色的变化或变亮/变暗。我不想使用内联svg,但我很乐意使用下面的img-src或对象技术。 如果不使用javascript,我如何控制颜色和大小。 我尝试过创建一个css类“search

    • 我从书中得到了以下代码https://hamednourhani.gitbooks.io/typescript-book/ 问题(--strictNullChecks): 为什么表达式中的2个函数有不同的类型?我预计在这两种情况下,s都不会是 为什么区域2函数希望返回类型为未定义的编号?在我看来,这里永远不会发生未定义的事情。我错了吗

    • 我用PHPass散列密码已经很久了。我承认仍然有一些我不完全理解(或忽略)的东西来正确地散列密码,所以今天我查看了所有我能找到的关于它的信息。 回顾PHPass文档,我已经进入了这个: 除了实际的哈希之外,phpass 在对新密码或密码进行哈希处理时会透明地生成随机 salt,并将哈希类型、salt 和密码拉伸迭代计数编码到它返回的“hash 编码字符串”中。当phpass根据存储的哈希对密码或密