我有一个用户模型,并且具有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。
谢谢
答案 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
代表链接的另一端。