[DUDA] [Java] Mapear composite key de forma bidireccional con Hibernate

Buenas.

Iba a plantear la duda en Stack Overflow pero voy a probar primero por aquí, a ver si se anima un poco el tema del subforo de desarrollo. Al tema:

Estoy haciendo una aplicación web con Hibernate para la capa de persistencia, y aquí ando un poco verde. Tengo dos entidades relacionadas entre sí del siguiente modo (ejemplo no real, pero es lo mismo).

@Entity(table = "item")
public class Item{
   @Id
   @GeneratedValue
   private Integer id;
   
   @OneToMany(fetch = FetchType.EAGER, mappedBy = "¿aquí qué carajos va?")
   private Set<Bid> bids;
}


@Entity(table = "bid")
public class Bid{
   @Id
   private Integer position;
   
   @Id
   @ManyToOne
   @JoinColumn(name = "id", nullable = false)
   private Item item;
}


Es decir, un Item tiene muchas pujas, y una puja tiene como clave compuesta la posición y el Id del Item, y quiero que sea bidireccional. ¿Cómo cawento mapeo esto?

Muchas gracias, y libertad para Rick.
Yo no he tocado ésto, pero la respuesta parece ser: depende de cómo lo montes xD

Mirate todo el apartado 7: docs.jboss.org/hibernate/orm/3.6/reference/es-ES/html/collections.html
y éste: mkyong.com/hibernate/hibernate-one-to-many-relationship-example-annotation/
exitfor escribió:Yo no he tocado ésto, pero la respuesta parece ser: depende de cómo lo montes xD

Mirate todo el apartado 7: docs.jboss.org/hibernate/orm/3.6/reference/es-ES/html/collections.html
y éste: mkyong.com/hibernate/hibernate-one-to-many-relationship-example-annotation/

Todos los caminos conducen a ese chino XD

Muchas gracias por tu respuesta.

La solución finalmente era bastante sencilla, pasé cerca de ella en varias ocasiones, mappedBy tendría el valor "id", que era algo que había probado sin que me funcionara. Al parecer también es necesario que la clase implemente Serializable. Ni siquiera es necesario que la tengan las dos, al menos debe tenerla la que contiene el id de la entidad relacionada.

@Entity(table = "item")
public class Item{
   @Id
   @GeneratedValue
   private Integer id;
   
   @OneToMany(fetch = FetchType.EAGER, mappedBy = "id")
   private Set<Bid> bids;
}


@Entity(table = "bid")
public class Bid implements Serializable{
   @Id
   private Integer position;
   
   @Id
   @ManyToOne
   @JoinColumn(name = "id", nullable = false)
   private Item item;
}
2 respuestas