无法更改JPA Eclipselink中的列名称

无法更改JPA Eclipselink中的列名称,jpa,eclipselink,Jpa,Eclipselink,我无法使@Column(name=“example”)正常工作 我有一个用户类: @Entity public class User { @Id private String username; .... } 角色一: @Entity public class Role { @Id private String name; .... } 在很多关系中。所以我创造了一个角色记忆: @Entity

我无法使@Column(name=“example”)正常工作

我有一个用户类:

@Entity
public class User {
     @Id
     private String username;
     ....
}
角色一:

   @Entity
    public class Role {
         @Id
         private String name;
         ....
}

在很多关系中。所以我创造了一个角色记忆:

@Entity
@IdClass(UserRolePK.class)
public class RoleMembership {

    @Id
    @ManyToOne
    @PrimaryKeyJoinColumn(name="USERNAME")
    private User user;

    @Id
    @ManyToOne
    @PrimaryKeyJoinColumn(name="ROLE")
    private Role role;
....
}
如您所见,主键在UserRolePK中定义:

public class UserRolePK{

    @Id
    @Column(name="ROLE")
    private String role;

    @Id
    @Column(name="USERNAME")
    private String user;
...
}
在这个类中,我使用@Column(name=“USERNAME”)和@Column(name=“ROLE”)将其名称强制添加到该字符串中,但它不起作用:JPA为它提供了默认名称USER\u USERNAME和ROLE\u name(以表\u ID格式)。 谁能帮我找出错误吗? 谢谢 安德烈

编辑: 我需要三张桌子:

  • 用户(用户名(pk)、密码……)
  • 用户角色(用户名、角色名称)
  • 角色(名称(主键)、描述)

我无法更改模型中的用户定义。

您对PrimaryKeyJoinColumn的使用似乎没有意义。我认为您应该只使用@JoinColumn,还是将列映射为基础


可能包括您完整的类和生成的DDL。

删除
UserRolePK
中的所有注释,并将
@PrimaryKeyJoinColumn
注释更改为
@JoinColumn
注释。

您确定要在应用程序启动时删除表并重新创建它们吗,我的建议无关紧要:)詹姆斯,谢谢你的回答。我能请你解释一下你通过“将列映射为基础”得到了什么吗?我编辑了问题,添加了我需要获得的结果。对于您看到的代码,除了列的名称之外,它是有效的(但这并不意味着它是正确的方法,正如您告诉我的那样)。谢谢,A