Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate-只为许多人加载代理_Hibernate_Many To Many_Jointable - Fatal编程技术网

Hibernate-只为许多人加载代理

Hibernate-只为许多人加载代理,hibernate,many-to-many,jointable,Hibernate,Many To Many,Jointable,我有两个由联接表联接的表: @实体 @表(name=“a”) 公共A类{ @身份证 @列(name=“id”,unique=true,nullable=false) 私人长id; @多个(目标实体=B类) @JoinTable(name=“a\u b\u join”,joinColumns=@JoinColumn(name=“a\u id”),inverseJoinColumns=@JoinColumn(name=“b\u id”)) 私有集bs=新HashSet(); } @实体 @表(na

我有两个由联接表联接的表:

@实体
@表(name=“a”)
公共A类{
@身份证
@列(name=“id”,unique=true,nullable=false)
私人长id;
@多个(目标实体=B类)
@JoinTable(name=“a\u b\u join”,joinColumns=@JoinColumn(name=“a\u id”),inverseJoinColumns=@JoinColumn(name=“b\u id”))
私有集bs=新HashSet();
}
@实体
@表(name=“b”)
公共B级{
@身份证
@列(name=“id”,unique=true,nullable=false)
私人长id;
}
数据库中有大量的a和相对较少的B。大多数A只有一个B,但可以有几个。对于A的任何给定结果集,只有少数几个不同的B。急切地加载多对多会导致相同的B被一次又一次地获取。我要做的是让Hibernate从初始SELECT上的join表中获取A的B的所有ID,并用代理填充“B”集合。那么每个B在会话中只提取一次


对于我的应用程序来说,另一种可行的方法是从联接表中加载一组B id。

我认为这是不可能的


另一种方法是将联接表映射为一个实体(让我们调用is
ABJoin
),用一个以
集合
为目标的OneToMany替换多个,然后立即获取该集合。因此,您将拥有一组加载的ABJoin,每个ABJoin都有一个未初始化的B代理。

这正是我在等待响应时决定实现的。我通常不喜欢为联接表创建实体类,但这就是目的。
@Entity
@Table( name = "a" )
public class A {
    @Id
    @Column( name = "id", unique = true, nullable = false )
    private long id;

    @ManyToMany( targetEntity = B.class )
    @JoinTable( name = "a_b_join", joinColumns = @JoinColumn( name = "a_id" ), inverseJoinColumns = @JoinColumn( name = "b_id" ) )
    private Set<B> bs = new HashSet<B>();
}

@Entity
@Table( name = "b" )
public class B {
    @Id
    @Column( name = "id", unique = true, nullable = false )
    private long id;
}