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ư sau
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
Comments
Post a Comment