7

我有两张桌子:

  1. 用户:

    • user_id(主要)

    • ETC ..

  2. 用户信息

    • id(主要)

    • user_id(唯一)

    • ETC ..

我想在现场创建一个从到user的oneToOne 关系。请注意,它是唯一的,但不是主要的。可以在Hibernate上完成吗?无论我在做什么,Hibernate 都会尝试使用该字段而不是 u字段。user_infouser_idusers_info.idsers_info.user_id

@OneToOne(mappedBy="user_id", cascade = {CascadeType.ALL}, fetch=FetchType.LAZY, optional=true)
@JoinColumn (name="user_id")    
public UserInfo getUserInfo() { return userInfo; }
public void setUserInfo(UserInfo userInfo) { this.userInfo = userInfo; }
private UserInfo userInfo;
4

4 回答 4

3

User你应该有:

@OneToOne(mappedBy="user", cascade = CascadeType.ALL, fetch=FetchType.LAZY, optional=true)
public UserInfo getUserInfo() { return userInfo; }

并在UserInfo

@OneToOne
@JoinColumn(name="user_id")
public User getUser() { return user; }

看看这里。这是一对一映射的第二个例子。

于 2012-06-14T08:55:23.050 回答
2

为什么你想要一个“唯一”的键,它是一个 1-1 映射和一个代理 ID?这是多余的。只需使两个 PK 相等,因为它是 1-1 映射。

于 2012-06-14T08:48:31.167 回答
0

是的,这应该有效。在一对一或多对一中,您在第一个表中有一个主键,在第二个表中有一个外键。

于 2012-06-14T08:49:15.497 回答
0

The mapping should work as you have defined the table column to join. But just one thing i am not sure as you defined all annotations over getter method, so will it work in the same manner.

于 2012-06-14T08:53:20.257 回答