Hibernate 在多对多关系中避免不必要的连接

Hibernate 在多对多关系中避免不必要的连接,hibernate,jpa,many-to-many,Hibernate,Jpa,Many To Many,我的数据库中有两个表,分别是media\u blog和media\u category。第三个表名为media\u blog\u category,它将博客与其所属的类别关联起来(一个博客可以属于多个类别,一个类别可能包含多个博客)。此关系在Hibernate/JPA中映射如下: @Entity @Table(name="media_blog") public class Blog { @Column(name="name") private String name;

我的数据库中有两个表,分别是
media\u blog
media\u category
。第三个表名为
media\u blog\u category
,它将博客与其所属的类别关联起来(一个博客可以属于多个类别,一个类别可能包含多个博客)。此关系在Hibernate/JPA中映射如下:

@Entity
@Table(name="media_blog")
public class Blog {
    @Column(name="name")
    private String name;

    @ManyToMany(fetch = FetchType.LAZY, targetEntity=MediaCategory.class)
    @JoinTable(name = "media_blog_category", 
        joinColumns = {@JoinColumn(name = "blog_id")}, 
        inverseJoinColumns = {@JoinColumn(name = "media_category_id")}
    )
    private Set<MediaCategory> categories;

    // Here goes the setters and getters for fields name and categories
}

@Entity
@Table(name="media_category")
public class MediaCategory {
    @Column(name="name")
    private String name;

    @ManyToMany(fetch = FetchType.LAZY, mappedBy="categories")
    private List<Blog> blogs;

    // Here goes the setters and getters for fields name and blogs
}
字段
类别
上设置的延迟提取类型按预期工作,因为没有查询类别信息

但是,在执行
设置blogcontegories=b.getCategories()时会执行以下查询:

问题是我只对类别id感兴趣(表
media\u blog\u category
中的字段
media\u category\u id
),但我注意到查询与
media\u category
表连接,并检索每个类别的所有字段(在本例中,字段
name
,但将来会有更多字段)以填充MediaCategory对象。有一个性能损失,因为它是通过连接来获取我不打算使用的信息

有没有一种方法可以避免Hibernate执行此联接,因此它使用MediaCategory代理填充上面的变量
blogCategories
(其中只有
id
字段可用-这就是我所需要的),并将对其余类别字段的检索延迟到调用“getName()”(或另一列getter)的时刻MediaCategory代理对象的名称

我想做的和这篇文章中的类似:

但是对于多对多的关系。 我尝试过那篇文章中所示的方法,所以用
@AccessType(“property”)
注释了类
mediacegory
中的
id
字段,但它不起作用。它似乎不适合多对多的关系,而只适合一对一的关系

谢谢

select blog0_.id as id11_0_, blog0_.name as name11_0_ 
from media_blog blog0_ where blog0_.id=?
select categories0_.blog_id as blog1_11_1_, 
    categories0_.media_category_id as media2_1_, 
    mediacateg1_.id as id2_0_,
    mediacateg1_.name as name2_0_ 
from media_blog_category categories0_ 
inner join media_category mediacateg1_ 
   on categories0_.media_category_id=mediacateg1_.id 
where categories0_.blog_id=?