我在使用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中获取我不想要的记录。它会导致性能问题。他们有什么方法可以应对这种情况吗?
请给我一个合适的答案。
答案 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,它将加载单个实体实例。为此实体映射的所有集合以及所有关联实体(无论是通过多对多还是一对一关联)都不会被加载。