我有以下代码:
@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);
我只在用户表中记录。
你能告诉我为什么吗?
答案 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