Java 如何指定JPA联接列名?

Java 如何指定JPA联接列名?,java,mysql,hibernate,jpa,Java,Mysql,Hibernate,Jpa,有人知道如何用下面的简单示例指定特定的列名吗 @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;

有人知道如何用下面的简单示例指定特定的列名吗

@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;

    ...
}

用户
实体中使用以下注释:

@ElementCollection
@CollectionTable(name = "user_roles")
@Column(name = "role_id")
private Set<Role> roles;
@ElementCollection
@CollectionTable(name=“用户角色”)
@列(name=“role\u id”)
私人设定角色;
来自Hibernate参考:

用户实体中使用以下注释:

@ElementCollection
@CollectionTable(name="user_roles", joinColumns=@JoinColumn(name="user_id"))
@Column(name="role_id")
public Set<Role> getRoles() { ... } 
@ElementCollection
@CollectionTable(name=“user\u roles”,joinColumns=@JoinColumn(name=“user\u id”))
@列(name=“role\u id”)
公共集getRoles(){…}

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

您的映射是错误的。Role是一个实体,但@ElementCollection应与基本类型或可嵌入项一起使用

如果角色是一个@Entity,那么我建议您需要一个@ManytoMany,其中at@JoinTable指定连接列和反向连接列

否则,您可以使角色可嵌入并使用@ElementCollection,它将为您提供一对多的user\u roles表,例如user\u id、Role\u name


这两种方法都将生成指定的模式。

谢谢,我也尝试过,但没有任何变化。不幸的是,它仍然使用“roles\u id”。com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:field list中的未知列“roles_id”您正在使用的JPA版本是什么?如果您从java代码生成架构,请使用drop和create generation type或手动删除table.JPA version 2.0(hibernate-JPA-2.0-api-1.0.1.Final.jar)当我在persistence.xml中将hibernate.hbm2ddl.auto=create指定为属性时,我会为我创建以下表格:create table
user\u roles
user\u id
bigint(20)NOT NULL,
roles\u id
int(11)NOT NULL,UNIQUE KEY
UK amwlmdek2qdnksxxxgd566knop
roles\u id
),KEY
FK\u amwlmdeik2qdnksxxgd566knop
roles\u id
),KEY
FK\u g1uebn6mqk9qiaw45vnacmyo2
user\u id
),约束
FK\u g1uebn6mqk9qiaw45vnacmyo2
外键(
user\u id
)引用
user
id>),约束
FK_amwlmdeik2qdnksxxgd566knop
外键(
roles\u id
)引用
role
id
)引擎=InnoDB默认字符集=latin1Thanks,将检查此项。上面的唯一区别是注释在“getter”上(考虑到我们已经添加了@Column部分,但不幸的是它没有改变任何事情)。谢谢,我已经在上面的回答中得出了这个结论。
@ElementCollection
@CollectionTable(name="user_roles", joinColumns=@JoinColumn(name="user_id"))
@Column(name="role_id")
public Set<Role> getRoles() { ... }