我对hibernateMap还比较陌生,我试图在类post和comentario之间实现这个功能,但运气不好
关系模型
@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;
没有Mapcomentario和它在post中的字段,它可以正常工作,但是当我决定Map它时,我得到了这个错误:在@mapsid mapping:idusuario中找不到列引用
它不是在comentario表中找到idusuario列吗?我不想添加它,我可以在mysql中实现连接,但我不知道如何在hibernate中实现
1条答案
按热度按时间hs1rzwqc1#
@MapsId
注解用于将父实体的主键字段Map到子实体(同名)。在您的情况下,您的父实体中有复合主键,但在子实体中您只希望引用它的一个字段。PostPK
有两个字段:idPost
以及idUsuario
. 但是在Comentario
当您指定要在其中提及单个列的多个关系时,初始化@JoinColumn
(它是idpost)并且没有字段idUsuario
在Map中可用。但根据@MapsId
注解两个字段(idPost
以及idUsuario
)预计在Comentario
班级。因此,在你的情况下
@MapsId
注解不起作用