title: JPA User, Role, manyToMany hibernate relationship
body: <p>I'm using JPA+Hibernate+SpringBoot+PostgreSQL, to create a relationship between different entities, but I am getting a ton of errors, including what looks like SQL errors, but the application started up anyway. Did I code the manyToMany relation correctly? There could be many users, and each user can have multiple roles. Maybe OneToMany is better?</p>
  
  <p>I'm using "spring-boot-starter-data-jpa"</p>
  
  <p>These are the only hibernate files I have so far.</p>
  
  <p><strong>Role.java</strong></p>
  
  <pre><code>@Entity(name = "role")
  public class Role implements java.io.Serializable {
      /**
       * 
       */
      private static final long serialVersionUID = -5525359165179861924L;
      @Id
      @GeneratedValue(strategy=GenerationType.AUTO)
      @Column(name = "id")
      int id;
  
      private String role;
  
      @ManyToMany(mappedBy = "roles",fetch = FetchType.LAZY)
      private Set&lt;User&gt; users;
  
  
      public Role(String role) {
          super();
          this.role = role;
      }
  
      public void setId(int id){
          this.id = id;
      }
  
      public int getId(){
          return id;
      }
  
      public String getRole() {
          return role;
      }
  
      public void setRole(String role) {
          this.role = role;
      }
  
      public Set&lt;User&gt; getUsers() {
          return users;
      }
  
      public void setUser(Set&lt;User&gt; users) {
          this.users = users;
      }
  }
  </code></pre>
  
  <p><strong>User.java</strong></p>
  
  <pre><code>@Entity
  @Table(name = "user")
  public class User implements java.io.Serializable {
  
      private static final long serialVersionUID = 4910225916550731448L;
  
      @Id
      @GeneratedValue(strategy = GenerationType.AUTO)
      @Column(name = "id", unique = true, nullable = false)
      private Long id;
  
      @Column(name = "created")
      Date created;
  
      @Column(name = "firstName", length = 100)
      private String firstName;
  
      @Column(name = "lastName", length = 100)
      private String lastName;
  
      @Column(name = "email", length = 150)
      private String email;
  
      @Column(name = "username", length = 150)
      private String username;
  
      @Column(name = "enabled")
      private int enabled;
  
      @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
      @JoinTable(joinColumns = @JoinColumn(name = "userId", referencedColumnName = "id"), 
      inverseJoinColumns = @JoinColumn(name = "roleId", referencedColumnName = "id"))
      private Set&lt;Role&gt; roles;
  
      protected User(){
          roles = new HashSet&lt;Role&gt;();
      }
  
      public Set&lt;Role&gt; getRoles(){
          return roles;
      }
  
      public void setRoles(Set&lt;Role&gt; roles){
          this.roles = roles;
      }
  
      public User(String firstName, String lastName, String email, String username, Set&lt;Role&gt; roles) {
          this.firstName = firstName;
          this.lastName = lastName;
          this.email = email;
          this.username = username;
          this.roles = roles;
      }
  }
  </code></pre>
  
  <p>And the errors I get:</p>
  
  <pre><code>2017-04-24 22:49:19.163  WARN 20488 --- [  restartedMain] org.hibernate.orm.deprecation            : HHH90000014: Found use of deprecated [org.hibernate.id.SequenceGenerator] sequence-based id generator; use org.hibernate.id.enhanced.SequenceStyleGenerator instead.  See Hibernate Domain Model Mapping Guide for details.
  2017-04-24 22:49:19.167  WARN 20488 --- [  restartedMain] org.hibernate.orm.deprecation            : HHH90000014: Found use of deprecated [org.hibernate.id.SequenceGenerator] sequence-based id generator; use org.hibernate.id.enhanced.SequenceStyleGenerator instead.  See Hibernate Domain Model Mapping Guide for details.
  2017-04-24 22:49:19.438  INFO 20488 --- [  restartedMain] org.hibernate.tuple.PojoInstantiator     : HHH000182: No default (no-argument) constructor for class: com.example.domain.Role (class must be instantiated by Interceptor)
  2017-04-24 22:49:19.527  INFO 20488 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000227: Running hbm2ddl schema export
  Hibernate: alter table user_roles drop constraint FKrhfovtciq1l558cw6udg0h0d3
  2017-04-24 22:49:19.531 ERROR 20488 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: alter table user_roles drop constraint FKrhfovtciq1l558cw6udg0h0d3
  2017-04-24 22:49:19.531 ERROR 20488 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : ERROR: relation "user_roles" does not exist
  Hibernate: alter table user_roles drop constraint FK55itppkw3i07do3h7qoclqd4k
  2017-04-24 22:49:19.532 ERROR 20488 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: alter table user_roles drop constraint FK55itppkw3i07do3h7qoclqd4k
  2017-04-24 22:49:19.533 ERROR 20488 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : ERROR: relation "user_roles" does not exist
  Hibernate: drop table if exists role cascade
  Hibernate: drop table if exists user cascade
  2017-04-24 22:49:19.535 ERROR 20488 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: drop table if exists user cascade
  2017-04-24 22:49:19.535 ERROR 20488 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : ERROR: syntax error at or near "user"
    Position: 22
  Hibernate: drop table if exists user_roles cascade
  Hibernate: drop sequence hibernate_sequence
  2017-04-24 22:49:19.537 ERROR 20488 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: drop sequence hibernate_sequence
  2017-04-24 22:49:19.538 ERROR 20488 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : ERROR: sequence "hibernate_sequence" does not exist
  Hibernate: create sequence hibernate_sequence start 1 increment 1
  Hibernate: create table role (id int4 not null, role varchar(255), primary key (id))
  Hibernate: create table user (id int8 not null, created timestamp, email varchar(150), enabled int4, first_name varchar(100), last_name varchar(100), username varchar(150), primary key (id))
  2017-04-24 22:49:19.564 ERROR 20488 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: create table user (id int8 not null, created timestamp, email varchar(150), enabled int4, first_name varchar(100), last_name varchar(100), username varchar(150), primary key (id))
  2017-04-24 22:49:19.564 ERROR 20488 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : ERROR: syntax error at or near "user"
    Position: 14
  Hibernate: create table user_roles (user_id int8 not null, role_id int4 not null, primary key (user_id, role_id))
  Hibernate: alter table user_roles add constraint FKrhfovtciq1l558cw6udg0h0d3 foreign key (role_id) references role
  Hibernate: alter table user_roles add constraint FK55itppkw3i07do3h7qoclqd4k foreign key (user_id) references user
  2017-04-24 22:49:19.585 ERROR 20488 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: alter table user_roles add constraint FK55itppkw3i07do3h7qoclqd4k foreign key (user_id) references user
  2017-04-24 22:49:19.585 ERROR 20488 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : ERROR: syntax error at or near "user"
    Position: 100
  2017-04-24 22:49:19.585  INFO 20488 --- [  restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000230: Schema export complete
  </code></pre>