我有兩個域模型:「UserBean」和「LoginBean」。這是一對多的關係,用戶有很多登錄記錄。 LoginBean.userid是UserBean.id的外鍵。 這裏是數據庫的DDL:org.hibernate.MappingException:實體映射中的重複列
CREATE TABLE `users` (
`id` int(11) NOT NULL,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`register_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
)
CREATE TABLE `login` (
`id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`login_date` datetime NOT NULL,
`login_result` char(1) NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
CONSTRAINT `login_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
)
@Entity
@Table(name = "login")
public class LoginBean {
@Id
@Column(name = "id", nullable = false)
@GenericGenerator(name = "ddd", strategy = "increment")
@GeneratedValue(generator = "ddd")
private Integer id; //PK
// FK --> user.id
@Column(name = "user_id", nullable = false)
private Integer userid;
@Column(name = "login_date", nullable = false)
private Date logindate;
@Column(name = "login_result", nullable = false)
private Boolean loginresult;
@ManyToOne
@ElementCollection(targetClass = fordream.hibernate.bean.UserBean.class)
private UserBean user;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUserid() {
return userid;
}
public void setUserid(Integer userid) {
this.userid = userid;
}
public Date getLogindate() {
return logindate;
}
public void setLogindate(Date logindate) {
this.logindate = logindate;
}
public Boolean getLoginresult() {
return loginresult;
}
public void setLoginresult(Boolean loginresult) {
this.loginresult = loginresult;
}
public UserBean getUser() {
return user;
}
public void setUser(UserBean user) {
this.user = user;
}
}
和:
@Entity
@Table(name = "users")
public class UserBean {
@Id
@GenericGenerator(name = "abc", strategy = "increment")
@GeneratedValue(generator = "abc")
private Integer id; //PK
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@Column(name = "register_date")
private Date register_date;
@OneToMany(mappedBy = "user", cascade = { CascadeType.MERGE })
private Set loginset;
public Set getLoginset() {
return loginset;
}
public void setLoginset(Set loginset) {
this.loginset = loginset;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getRegister_date() {
return register_date;
}
public void setRegister_date(Date register_date) {
this.register_date = register_date;
}
}
當我運行應用程序,我得到一個消息:Repeated column in mapping for entity: LoginBean column: user_id (should be mapped with insert="false" update="false")
但我檢查每一個地方,我從來沒有在「LoginBean」中定義了兩次「user_id」。 這就是爲什麼?謝謝 !
非常感謝!當我寫入「insertable = false和updateable = false」時,它沒有問題。但我仍然不知道LoginBean在哪裏重複定義「user_id」。 我把成員變量「userid」指定了列名「user_id」,這是不正確的? – forDream
@forDream請檢查我的更新答案,如果解決不忘記接受答案 – Make
@Mike,這只是一個POJO類。如果我刪除註釋,只有幾個屬性(getter/setter方法)。 「id」指向表的主鍵,「user_id」是LoginBean的外鍵,它是UserBean的主鍵。我把我的數據庫的DDL更新的問題。 – forDream