Spring 按ReferenceColumnName休眠多个id列不工作

Spring 按ReferenceColumnName休眠多个id列不工作,spring,postgresql,hibernate,spring-security,many-to-many,Spring,Postgresql,Hibernate,Spring Security,Many To Many,这是不应该发生的,因为许多人已经多次使用类似的案例。我正在开发一个Spring根/安全应用程序,让一个用户表加入一个角色表,并带有一个单向多对多映射 我的用户类: @Entity @Table(name = "myuser", uniqueConstraints = { @UniqueConstraint(columnNames = { "email" }) }) public class User { @Id @GeneratedValue(strategy = Genera

这是不应该发生的,因为许多人已经多次使用类似的案例。我正在开发一个Spring根/安全应用程序,让一个用户表加入一个角色表,并带有一个单向多对多映射

我的用户类:

@Entity
@Table(name = "myuser", uniqueConstraints = { @UniqueConstraint(columnNames = { "email" }) })
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // was GenerationType.AUTO
    @Column(name = "id")
    private int id;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"))
    private Set<Role> roles;
...
表是在DB(Postgresql)中自动创建的,没有正确约束的问题。但是,在成功插入一个新用户并填充角色表后,通过电子邮件搜索用户时,我得到以下错误:

PreparedStatementCallback; bad SQL grammar [
select u.email, r.role from myuser u inner join user_role ur on(u.user_id=ur.user_id) inner join role r on(ur.role_id=r.role_id) 
where u.email=?]; nested exception is org.postgresql.util.PSQLException: ERROR: column u.user_id does not exist
请注意,我确实在联接表/列注释中使用了“referencedColumnName”。为什么Hibernate仍然生成u.user\u id和r.role\u id,而不是u.id和r.id?发生了什么?跟Postgres方言有关吗


而且,正如预期的那样,如果我将id更改为@Column(name=“user\u id”)和@Column(name=“role\u id”),那么它可以正常工作。但是,为什么呢?

我也有同样的问题。在我的例子中,“user\u id”列不存在于我的数据库中的任何位置,但由于某种原因,当我试图在“user”和“authorities”表之间建立连接时,hibernate会生成一个名为“user\u id”的字段,尽管我使用了referencedColumnName属性。
PreparedStatementCallback; bad SQL grammar [
select u.email, r.role from myuser u inner join user_role ur on(u.user_id=ur.user_id) inner join role r on(ur.role_id=r.role_id) 
where u.email=?]; nested exception is org.postgresql.util.PSQLException: ERROR: column u.user_id does not exist