我有Persistent类,指的是许多带有LAZY fetch类型的集合,比如
@Entity
@Table(name = "TABLE")
public class Table implements Serializable {
....
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "LIST1", nullable = true)
private ArrayList list1;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "LIST2", nullable = true)
private ArrayList list2;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "LIST1", nullable = true)
private ArrayList list1;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "LIST2", nullable = true)
private ArrayList list2;
....
}
我已经通过Hibernate实例化了一些TABLE类型的对象,将它添加到了一个表列表中,现在想要为这个列表中的所有对象获取这个集合中的一个(比如list2)。
for(Table table:tables){
result=table.list2;
....
}
但是这样Hibernate会生成一系列单独的SQL查询。可以在一个查询中对集合中的所有对象进行hibernate提取list2吗? (重要的是不要创建新的Table类实例,而是修改已经存在的对象)
答案 0 :(得分:1)
“fetch”连接允许值的关联或集合 使用单个选择与其父对象一起初始化。 这在集合的情况下特别有用。它 有效地覆盖了外连接和延迟声明 关联和集合的映射文件。
select t from Table t
left join fetch t.list2
where ...
答案 1 :(得分:0)
您应该使用泛型映射list2属性。让我们说:
@Entity
@Table(name = "TABLE")
public class Table implements Serializable {
....
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "LIST1", nullable = true)
private List<OtherClass> list1;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "LIST2", nullable = true)
private List<OtherClass> list2;
}
HQL查询:
select list2 from Table
因此,假设您正在使用hibernate模板来获取数据:
List<OtherClass> result = getHibernateTemplate().find("select list2 from Table");