Hibernate: использование части составного FK в другом объекте PK

0

im относительно новый для Hibernate Mappings im, пытающийся достичь этой функциональности между классом 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;

без сопоставления comentario и его полей в Post его рабочий режим, но когда я решил сопоставить его, я получаю эту ошибку. Невозможно найти ссылку на столбец в сопоставлении @MapsId: idUsuario

не найти столбец idUsuario в таблице Comentario? Я не хочу добавлять его, я могу достичь объединений в mysql, но я не знаю, как это сделать в Hibernate

Теги:
hibernate
jpa

1 ответ

0

Аннотации @MapsId используются для сопоставления полей первичного ключа родительского объекта с дочерним объектом (с тем же именем). В вашем случае у вас есть составной первичный ключ в родительском объекте, но в дочернем объекте вы хотите ссылаться только на одно его поле. PostPK имеет два поля: idPost и idUsuario. Но в классе Comentario когда вы указываете отношения ManyToOne, вы указываете один столбец в @JoinColumn (который является idPost), и никакое поле для idUsuario не доступно в вашем сопоставлении. Но в соответствии с поведением @MapsId аннотации как поля (idPost и idUsuario), как ожидается, в Comentario классе.

Таким образом, в вашем случае аннотация @MapsId не будет работать

  • 0
    Так что я не могу достичь того, что я ищу (отображая одну часть ключа) хотя бы прямым способом?
  • 0
    Вы можете сделать это только с помощью аннотации @JoinColumn. В рамках этого используйте атрибуты «имя» и «refrencedColumn»
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню