Hibernate映射中的最佳提取实践(多对一)

时间:2012-05-25 15:40:54

标签: java hibernate

我在使用hibernate进行多对一映射时遇到问题。我有两个表,表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中获取我不想要的记录。它会导致性能问题。他们有什么方法可以应对这种情况吗?

请给我一个合适的答案。

2 个答案:

答案 0 :(得分:2)

@ManyToOne(lazy = true)
private B b;

你需要的只是。有关详细信息,请阅读hibernate documentation

答案 1 :(得分:0)

您的要求符合Lazy Initialization。为了实现它,您可以添加注释或在检索数据时使用hibernate session的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,它将加载单个实体实例。为此实体映射的所有集合以及所有关联实体(无论是通过多对多还是一对一关联)都不会被加载。