Java 使用@JoinTable的@ManyToMany注释的JPA问题

Java 使用@JoinTable的@ManyToMany注释的JPA问题,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我试图在两个实体之间创建关系:用户和角色 实体(users\u roles)之间的关系表已成功生成,但除此之外,组成此表的两列id\u user和id\u role也被添加到角色表中,我不确定这是否是预期的 角色实体: 用户实体: 这是预期的行为 @JoinTable(name = "users_roles", joinColumns = @JoinColumn(name = "id_user", referencedColumnName = "id"), inverseJoinColumns

我试图在两个实体之间创建关系:用户和角色

实体(users\u roles)之间的关系表已成功生成,但除此之外,组成此表的两列id\u user和id\u role也被添加到角色表中,我不确定这是否是预期的

角色实体:

用户实体:


这是预期的行为

@JoinTable(name = "users_roles", joinColumns = @JoinColumn(name = "id_user", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "id_role", referencedColumnName = "id"))
这说明我们正在创建一个新的联接表,它联接两个表中的两列,这两个表分别映射了id_user from user和id_role from role table

你可以查一下


问题是在@JoinTable注释内的joinColumns和inverseJoinColumns上使用optonal referencedColumnName=id。。。我删除了,问题解决了

谢谢你的回答!问题是这两列都被添加到了角色表中。。。所以我在那张表上有:id | description | id | user | id | role
package br.ufrn.imd.hospital.entity;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.validation.Valid;

@Table(name = "\"user\"")
@Entity
public class User extends AbstractEntity {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_USER")
    @SequenceGenerator(name = "SEQ_USER", sequenceName = "seq_user", allocationSize = 1)
    private Long id;

    @Valid
    @OneToOne(cascade= {CascadeType.MERGE,CascadeType.PERSIST})
    private Person person;

    @ManyToMany
    @JoinTable(name = "users_roles", joinColumns = @JoinColumn(name = "id_user", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "id_role", referencedColumnName = "id"))
    private List<Role> roles;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }

    public List<Role> getRoles() {
        return roles;
    }

    public void setRoles(List<Role> roles) {
        this.roles = roles;
    }
}
@JoinTable(name = "users_roles", joinColumns = @JoinColumn(name = "id_user", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "id_role", referencedColumnName = "id"))