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




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

Popular posts from this blog

Fixing the DeepSpeed Import Error While Fine-Tuning the Qwen Model

Amazon Linux 2023 - User data configuration for launch templates to connect to the EKS cluster

How to create ISM policy and rotate logs in opensearch