【问题标题】:Cannot change colum names in JPA Eclipselink无法更改 JPA Eclipse 中的列名link
【发布时间】:2012-11-08 11:49:49
【问题描述】:

我在使 @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),描述)

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

【问题讨论】:

  • 您确定要在应用启动时删除表并重新创建它们吗?
  • 在这种情况下,我的建议是无关紧要的:)

标签: jpa eclipselink


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    也许包括你完整的课程,以及生成的 DDL。

    【讨论】:

    • 詹姆斯,感谢您的回复。我可以请您通过“将列映射为基础”来向我解释您的 bean 吗?我编辑了问题,添加了我需要获得的结果。使用您所看到的代码,它可以工作(但这并不意味着它是正确的方法,正如您告诉我的那样),除了列的名称。谢谢,A
    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    相关资源
    最近更新 更多