休眠执行多个查询

时间:2018-07-30 12:16:19

标签: hibernate one-to-one

我有一个用户模型,并且具有id和其他属性。

public class User{
      int id;
      .....

      @OneToOne(fetch=FetchType.LAZY)
      @JoinColumn(name="id")
      private UserLocation userLocationObj;

}

UserLocation是模型类,像UserLocation一样,还有更多5-6个具有相同批注的属性,以与User类建立关联。

在UserLocation模型类和其他模型类中,我也与用户类进行了一对一的映射。

以及其他属性以及其getter和setter。当我尝试通过使用id获取User类的对象时,它正在执行n个查询,然后显示stackoverflow错误。为什么这样??

我的用户表结构是: 用户

+----------------------+-----
| Field                | Key|
+----------------------+-----
| id                   | PRI| 
| userName             |    |             
| first_name           |    |             
| middle_name          |    |            
| last_name            |    |            
| dateOfBirth          |    |            
| gender               |    |            
| city                 |    |            
| email                |    |
+----------------------+----+

My UserLocation table Structure is :
UserLocation
+-----------------++-----
| Field           | Key |
+-----------------+------
| id              | PRI |
| user_id         |     |
| current_city    |     |
| current_country |     |
| latitude        |     |
| longitude       |     |
| iso_location    |     |
+-----------------+-----+
UserLocation中的

UserId是Users表的ID。

谢谢

1 个答案:

答案 0 :(得分:0)

这里的问题与您的列名有关: 您正在告诉休眠状态@JoinColumn(name="id"):这意味着表User中有一个名为id的字段,该字段联接到表UserLocation中,这不是您的表数据库结构。

相反,您在User表中有对象UserLocation,因此用

表示
public class UserLocation{
      int id;
      .....

      @OneToOne(fetch=FetchType.LAZY)
      @JoinColumn(name="user_id")
      private User user;

}

然后,您可以让User类知道它已经与此连接UserLocation类:

public class User{
      int id;
      .....

      @OneToOne(fetch=FetchType.LAZY, mappedBy = "user_id")
      private UserLocation userLocationObj;

}

JoinColumn注释指示该类是该关系的所有者,因此在这种情况下,所有者为UserLocation,而mappedBy代表链接的另一端。