1

我在使用休眠模式进行多对一映射时遇到问题。我有两个表,表 A 和表 B。我映射了这些表之间的多对一关系。两个表可以一起使用,也可以单独使用。

表在 Java 中的类表示,例如:

class A{ 
 private B b; 
 private Integer val1; 
 private Integer val2; 
 private Integer val3; 
}

class B{
 private Integer val1;
 private Integer val2;
 private Integer val3;
}

问题是每当我尝试从表 A 中检索/获取记录时,hibernate 也会一直从表 B 中获取我不想要的记录。它导致性能问题。他们有什么办法来处理这种情况吗?

请用适当的答案指导我。

4

2 回答 2

2
@ManyToOne(lazy = true)
private B b;

是你所需要的全部。阅读休眠文档以获取更多详细信息。

于 2012-05-25T16:50:06.047 回答
0

您的要求符合Lazy Initialization. 为了实现它,您可以添加注释,或者在检索数据时可以使用休眠会话的get方法。

在你的情况下,你可以这样写:

Session session = SessionFactory.getCurrentSession();
A aObject= (A) session.get(A.class, A_ID);

如本https://community.jboss.org/wiki/AShortPrimerOnFetchingStrategies?_sscc=t链接所述:

如果您通过 get() 或 load() 通过标识符检索它,Hibernate3 会加载单个实体实例。不加载为此实体映射的所有集合以及所有关联实体,无论是通过多对多还是一对一关联。

于 2013-07-29T11:02:14.943 回答