我是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具有两个字段:idPostidUsuario。但是在Comentario类中,当您指定ManyToOne关系时,您提到的是@JoinColumn中的单列(即idPost),并且映射中没有idUsuario字段。但是,根据@MapsId批注的行为,在idPost类中都需要两个字段(idUsuarioComentario)。

因此,在您的情况下@MapsId注释将不起作用

07-24 09:32