2016-02-02 6 views
0

я затем учебник: http://www.codejava.net/frameworks/hibernate/hibernate-one-to-one-mapping-with-foreign-key-annotations-exampleJPA OneToOne не работает

Я следующий код:

@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

Ваша проблема в том, что вы смешиваете типы доступа. В объекте User вы указали @Id в поле (private Long userId), тогда как вы определили сопоставление соединения для свойства (getter to 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

Смежные вопросы