Hibernate OneToOne加入了唯一但不是主键

时间:2012-06-14 08:43:42

标签: java hibernate annotations one-to-one

我有两张桌子:

  
      
  1. 用户:

         
        
    • user_id(主要)

    •   
    • 等..

    •   
  2.   
  3. users_info

         
        
    • id(主要)

    •   
    • user_id(唯一)

    •   
    • 等..

    •   
  4.   

我想在user字段上创建从user_infouser_id的oneToOne关系。请注意,它是唯一的但不是主要的。 可以在Hibernate上完成吗?无论我做什么,Hibernate都会尝试使用users_info.id字段而不是u sers_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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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; }

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

映射应该在您定义要加入的表列时起作用。但只有一点我不确定,因为你定义了getter方法的所有注释,所以它将以相同的方式工作。