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 KEYUK amwlmdek2qdnksxxxgd566knop
(roles\u id
),KEYFK\u amwlmdeik2qdnksxxgd566knop
(roles\u id
),KEYFK\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() { ... }