1

有谁知道如何使用以下简单示例指定特定的列名?

@Entity
public class Role {
    @Id
    @GeneratedValue
    @Column(name="id")
    private final Integer id;

    ...
}

@Entity
public class User {
    @Id
    @GeneratedValue
    @Column(name="id")
    private final Long id;

    @ElementCollection
    @CollectionTable(name = "user_roles" joinColumns = { @JoinColumn(name = "user_id")})
    private final Set<Role> roles;

    ...
}

这令人沮丧地产生了一个名为“user_roles”的表和字段名称:“user_id”和“roles_id”。

为什么是“roles_id”而不是“role_id”,如何将其更改为“role_id”?

值得我使用 JPA 2.0、MySQL 和 Hibernate。我要添加的数据是正确添加的,所以这只是一个口味问题。

编辑:

以下可能有点 JPA 1.0'ish,但它可以根据需要工作。

@ManyToMany
@JoinTable(name = "user_roles", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
4

4 回答 4

2

User在实体中使用以下注释:

@ElementCollection
@CollectionTable(name = "user_roles")
@Column(name = "role_id")
private Set<Role> roles;
于 2013-10-02T18:52:08.790 回答
0

从休眠参考: http ://docs.jboss.org/hibernate/orm/4.2/manual/en-US/html_single/

在您的用户实体中使用以下注释:

@ElementCollection
@CollectionTable(name="user_roles", joinColumns=@JoinColumn(name="user_id"))
@Column(name="role_id")
public Set<Role> getRoles() { ... } 
于 2013-10-03T05:13:50.547 回答
0

我认为问题在于@ElementCollection。它似乎更适合简单类型。我将坚持使用在我对问题的编辑中指定的 @ManyToMany 注释。似乎这个话题之前已经以另一种方式解决过:@OneToMany 和 @ElementCollection 之间的区别?

于 2013-10-03T19:01:25.730 回答
0

你的映射是错误的。Role 是一个实体,但 @ElementCollection 应该与基本类型或 Embeddables 一起使用。

如果 Role 是一个 @Entity,那么我建议你想要一个 @ManytoMany,在 @JoinTable 指定连接和反向连接列

否则,您可以使 Role Embeddable 并使用 @ElementCollection,这将为您提供一对多的 user_roles 表,例如 user_id、role_name。

其中任何一个都将按照指定生成您的架构。

于 2013-10-03T23:18:39.690 回答