Thêm cột ở bảng manytomany trong jpa hibernate
Follow this tutorial
https://www.codejava.net/frameworks/hibernate/hibernate-many-to-many-association-with-extra-columns-in-join-table-example
Bạn sẽ thiết kế bảng USERS_GROUPS với thông tin các trường các cột đầy đủ mapping ID rồi các trường khác
Sau đó bạn sẽ thiết kế 2 entity còn lại để map lại vào bảng trung gian này với từ khóa mapped by
https://www.codejava.net/frameworks/hibernate/hibernate-many-to-many-association-with-extra-columns-in-join-table-example
CREATE TABLE `users` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(45) NOT NULL, `password` varchar(45) NOT NULL, `email` varchar(45) NOT NULL, PRIMARY KEY (`user_id`) ) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=latin1$$ CREATE TABLE `groups` ( `group_id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(45) NOT NULL, PRIMARY KEY (`group_id`) ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=latin1$$ CREATE TABLE `users_groups` ( `user_group_id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `group_id` int(11) NOT NULL, `activated` tinyint(1) NOT NULL, `registered_date` datetime NOT NULL, PRIMARY KEY (`user_group_id`), KEY `fk_user` (`user_id`), KEY `fk_group` (`group_id`), CONSTRAINT `fk_group` FOREIGN KEY (`group_id`) REFERENCES `groups` (`group_id`), CONSTRAINT `fk_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) )
@Entity
@Table(name = "USERS")
public class User {
@Id
@GeneratedValue
@Column(name = "USER_ID")
private long id;
private String username;
private String password;
private String email;
@OneToMany(mappedBy = "user")
private Set<UserGroup> userGroups = new HashSet<UserGroup>();
public User() {
}
public User(String username, String password, String email) {
this.username = username;
this.password = password;
this.email = email;
}
// getter
//setter
}
@Entity
@Table(name = "GROUPS")
public class Group {
@Id
@GeneratedValue
@Column(name = "GROUP_ID")
private long id;
private String name;
@OneToMany(mappedBy = "group")
private Set<UserGroup> userGroups = new HashSet<UserGroup>();
public Group() {
}
//getter
//setter
}
@Entity
@Table(name = "USERS_GROUPS")
public class UserGroup {
@Id
@GeneratedValue
@Column(name = "USER_GROUP_ID")
private long id;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "USER_ID")
private User user;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "GROUP_ID")
private Group group;
// additional fields
private boolean activated;
@Column(name = "REGISTERED_DATE")
@Temporal(TemporalType.DATE)
private Date registeredDate;
// getter
//setter
}
Bạn có thể nghĩ đơn giản như sauBạn sẽ thiết kế bảng USERS_GROUPS với thông tin các trường các cột đầy đủ mapping ID rồi các trường khác
Sau đó bạn sẽ thiết kế 2 entity còn lại để map lại vào bảng trung gian này với từ khóa mapped by

Comments
Post a Comment