有没有人知道如何使用以下简单示例指定特定的列名?
@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',但它可以按要求运行。
@ManyToMany
@JoinTable(name = "user_roles", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
答案 0 :(得分:2)
在User
实体中使用以下注释:
@ElementCollection
@CollectionTable(name = "user_roles")
@Column(name = "role_id")
private Set<Role> roles;
答案 1 :(得分:0)
来自Hibernate参考: 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() { ... }
答案 2 :(得分:0)
我认为问题在于@ElementCollection。它似乎更适合简单类型。我将坚持使用我对该问题的编辑中指定的@ManyToMany注释。看来这个话题在以前用另一种方式解决过:Difference between @OneToMany and @ElementCollection?
答案 3 :(得分:0)
您的映射是错误的。 Role是一个实体,但@ElementCollection应该与基本类型或Embeddables一起使用。
如果Role是@Entity,那么我建议你想在@JoinTable中使用@ManytoMany来拼接连接和反连接列
否则,您可以使用Role Embeddable并使用@ElementCollection,它将为您提供一对一的user_roles表,类似于user_id,role_name。
其中任何一个都会按指定的方式生成架构。