0

我在使 @Column(name="example") 工作时遇到问题。

我有一个用户类:

@Entity
public class User {
     @Id
     private String username;
     ....
}

角色一:

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

}

那是一个多对多的关系。所以我创建了一个 RoleMembership:

@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_USERNAME 和 ROLE_NAME(位于TABLE_ID 格式)。谁能帮我找出错误?谢谢,安德里亚

编辑:我需要三个表:

  • 用户(用户名(pk),密码....)
  • user_role(用户名,角色名)
  • 角色(名称(pk),描述)

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

4

2 回答 2

1

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

或许包括你完整的类,以及生成的 DDL。

于 2012-11-08T13:49:10.180 回答
1

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

于 2012-11-09T14:49:18.290 回答