我是Hibernate Mapping的新手,我试图在Post和Comentario类之间实现此功能而没有运气
Relational model
@Embeddable
public class PostPK implements Serializable {
@Column(name="idPost")
private int postID;
@Column(name="idUsuario")
private int userIDFK;
-------------------------------
@Entity
@Table(name="Post")
public class Post {
@EmbeddedId
private PostPK id;
@ManyToOne
@MapsId(value="userIDFK")
@JoinColumn(name="idUsuario")
private Usuario usuario;
@OneToMany(mappedBy="post")
private List<Comentario> comentarios;
@Column(name="titulo")
private String titulo;
-----------------------------------
@Embeddable
public class ComentarioPK implements Serializable{
@Column(name="idComentario")
private int comentarioId;
@Column(name="idPost")
private int postIdFK;
---------------------------
@Entity
@Table(name="Comentario")
public class Comentario {
@EmbeddedId
private ComentarioPK id;
@ManyToOne
@MapsId("postIdFK")
@JoinColumn(name="idPost",referencedColumnName="idPost")
private Post post;
@Column(name="texto")
private String texto;
没有映射comentario及其在Post中的字段工作正常,但当我决定映射它时,出现此错误
在@MapsId映射中找不到列引用:idUsuario
在Comentario表中找不到idUsuario列?我不想添加它,我可以在mysql中实现联接,但是我不知道如何在Hibernate中进行添加
最佳答案
@MapsId
批注用于将父实体的主键字段与子实体(具有相同名称)映射。
在您的情况下,您在父实体中具有复合主键,但是在子实体中,您只想引用它的一个字段。PostPK
具有两个字段:idPost
和idUsuario
。但是在Comentario
类中,当您指定ManyToOne关系时,您提到的是@JoinColumn
中的单列(即idPost),并且映射中没有idUsuario
字段。但是,根据@MapsId
批注的行为,在idPost
类中都需要两个字段(idUsuario
和Comentario
)。
因此,在您的情况下@MapsId
注释将不起作用