JPA OneToOne无法正常工作

时间:2016-02-02 22:08:50

标签: jpa

我接着是教程:http://www.codejava.net/frameworks/hibernate/hibernate-one-to-one-mapping-with-foreign-key-annotations-example

我有以下代码:

@Entity
@Table(name = DomainConstant.TABLE_USER)
public class User{

    @Id
    @Column(name = DomainConstant.DOMAIN_USER_ID)
    @GeneratedValue
    private Long userId;

    private UserActivationCode userActivationCode;

    ///////////////////// CONSTRUCTOR....
    /// STANDARD GET AND SET....


    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name =  DomainConstant.DOMAIN_ACTIVATION_LINK_ID)
    public UserActivationCode getUserActivationCode() {
        return userActivationCode;
    }
}

@Entity
@Table(name = DomainConstant.TABLE_USER_ACTIVATON_LINK)
public class UserActivationCode {

    @Id
    @Column(name = DomainConstant.DOMAIN_ACTIVATION_LINK_ID)
    @GeneratedValue
    private Long userActivationCodeId;

    @Column(name = DomainConstant.DOMAIN_ACTIVATION_DATE)
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date date;

    @Column(name = DomainConstant.DOMAIN_ACTIVATION_CODE)
    private String code;

    ///////////////////// CONSTRUCTOR....
    /// STANDARD GET AND SET....

}

当我保存User对象时,它没有在UserActivationCode中记录,为什么?

像这样:

User newUser = new User();
newUser.setUserActivationCode(new UserActivationCode("this is example"));
userDao.save(newUser);

我只在用户表中记录。

你能告诉我为什么吗?

1 个答案:

答案 0 :(得分:1)

您的问题是您正在混合访问类型。在User实体中,您已在字段上指定@Id(专用Long userId),而您已在属性上定义了连接映射(getter到UserActivationCode)。如果在字段上指定连接映射,则它应该按原样运行。

@Entity
@Table(name = DomainConstant.TABLE_USER)
public class User{

    @Id
    @Column(name = DomainConstant.DOMAIN_USER_ID)
    @GeneratedValue
    private Long userId;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name =  DomainConstant.DOMAIN_ACTIVATION_LINK_ID)
    private UserActivationCode userActivationCode;

    ///////////////////// CONSTRUCTOR....
    /// STANDARD GET AND SET....


    public UserActivationCode getUserActivationCode() {
        return userActivationCode;
    }
}

有关访问权限和访问类型的详细信息,请参阅Access, Java EE 7