Hibernate一对一映射不更新JoinColumn id

时间:2012-07-23 15:49:11

标签: java hibernate struts2 hibernate-mapping ibm-rad

不确定如何为此标题。所以我只是慢慢地解决问题。

目前,我正在开发一个使用Struts2Hibernate的动态网络项目。在网络上没有足够的文档涉及这些2.有很多关于它们的文档和教程,但很少在一起。最多我只会找到有关如何集成它们的教程或通常只涉及一个表的简单CRUD。

我现在拥有的是2个表,UsersProfile,我想同时更新这两个表。我稍后会详细介绍。

这是我的数据库表:

Users
--------------
UserID
Email
Password
Status
userType

Profile
--------------
ProfileID
UserID
Name
Interest
ProfileDetails

我正在创建一个注册页面。在此页面中,用户将记下他们的姓名,电子邮件和密码。如您所见,name位于Profile表中。我可以在Users表上插入电子邮件和密码,也可以在Profile表中插入Name。问题是UserID没有插入到Profile表中。

我的注册页面有此表单,提交时将执行addUser操作。

<s:form action="addUser">
<s:push value="user">
    <s:hidden name="id" />
    <s:textfield name="profile.name" label="Name" />
    <s:textfield name="email" label="Email" />
    <s:password name="password" label="Password" />
    <s:submit />
</s:push>
</s:form>

我的用户类:

@Entity
@Table(name="Users")
public class User implements Serializable {

private Long id;
private String email;
private String password;
private Boolean status;
private Boolean userType;
private Profile profile;

@OneToOne(mappedBy="user", cascade=CascadeType.ALL)
public Profile getProfile() {
    return profile;
}
public void setProfile(Profile profile) {
    this.profile = profile;
}
@Id
@GeneratedValue
@Column(name="USERID")
public Long getId() {
    return id;
}
public void setId(Long id) {
    this.id = id;
}

@Column(name="EMAIL")
public String getEmail() {
    return email;
}
public void setEmail(String email) {
    this.email = email;
}

@Column(name="PASSWORD")
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}

@Column(name="STATUS")
public Boolean getStatus() {
    return status;
}
public void setStatus(Boolean status) {
    this.status = status;
}

@Column(name="USERTYPE")
public Boolean getUserType() {
    return userType;
}
public void setUserType(Boolean userType) {
    this.userType = userType;
}

public User() {}

public User(String email, String password, Boolean status, Boolean userType) {
    this.email = email;
    this.password = password;
    this.status = status;
    this.userType = userType;
}
}

我的个人资料类:

@Entity
@Table(name="Profile")
public class Profile implements Serializable {

private Long profile_id;
private String name;
private String interest;
private String profile_details;
private User user;

@OneToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="USERID")
public User getUser() {
    return user;
}
public void setUser(User user) {
    this.user = user;
}
@Id
@GeneratedValue
@Column(name="PROFILEID")
public Long getProfile_id() {
    return profile_id;
}
public void setProfile_id(Long profile_id) {
    this.profile_id = profile_id;
}

@Column(name="NAME")
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

@Column(name="INTEREST")
public String getInterest() {
    return interest;
}
public void setInterest(String interest) {
    this.interest = interest;
}

@Column(name="PROFILEDETAILS")
public String getProfile_details() {
    return profile_details;
}
public void setProfile_details(String profile_details) {
    this.profile_details = profile_details;
}
}

我的注释有问题,还是我需要在表单中添加其他内容?如果您需要任何进一步的细节,请告诉我。

另外如果您有关于Struts2 + Hibernate的更深入的教程,请告诉我..

干杯!〜

0 个答案:

没有答案