Tengo problemas donde Hibernate está consultando una clase del otro lado de una relación perezosa onetoone.Hibernate Consulta de JPA OneToOne a pesar de Lazy Fetch
La consulta a top_players, dependiendo de la configuración de caché, realiza una consulta a través de una tabla de asignación para obtener los ID de la tabla QHPlayer.
Después de realizar la consulta principal, consulta cada instancia de la tabla QHPlayer.
Sin embargo, hace lo incorrecto en dos escenarios diferentes.
Si tengo el almacenamiento en caché activado, consultará las instancias de QHPlayer y luego consultará la tabla inventory_item. Si tengo el almacenamiento en caché desactivado, se realizará la consulta a QHPlayer con una unión a inventory_item.
El problema es que no importa cómo lo hago, insiste en consultar la tabla inventory_item. Esto es lo que no quiero No necesito los datos en inventory_item en este momento.
Supongo que algo anda mal con mis declaraciones onetoone entre QHPlayer y PlayerInventoryItem.
¿Alguna idea por favor?
El código en cuestión es el siguiente:
Query query = entityManager.createQuery("SELECT c FROM top_players c WHERE c.teamId=:teamId ORDER BY c.level DESC, c.adjustedFantasyPointsTotal DESC, c.id ASC");
query.setParameter("teamId", teamId);
List<TopPlayers> results = query.getResultList();
@XmlAccessorType(XmlAccessType.PROPERTY)
@Entity(name="player_template")
@Table(name="player_template")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class QhPlayer implements Serializable {
@Id
public Integer getPlayerTemplateId() {
return playerTemplateId;
}
@OneToOne(mappedBy ="playerTemplate", fetch = FetchType.LAZY)
@XmlTransient
public PlayerInventoryItem getInventoryItem() {
return inventoryItem;
}
}
@Entity(name = "qhplayer_inventory_item")
@DiscriminatorValue("PLAYER")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class PlayerInventoryItem extends InventoryItem {
private QhPlayer playerTemplate;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="player_template_id")
@XmlTransient
public QhPlayer getPlayerTemplate() {
return playerTemplate;
}
}
@Entity(name="inventory_item")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name = "inventory_item_type",
discriminatorType = DiscriminatorType.STRING
)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public abstract class InventoryItem {
private int inventoryItemId;
}
@Entity(name = "top_players")
@XmlRootElement(name = "top_player")
@Table(name="player")
@SecondaryTables({
@SecondaryTable(name="player_stats", pkJoinColumns={
@PrimaryKeyJoinColumn(name="playerId", referencedColumnName="id")
}),
@SecondaryTable(name="player_mapping", pkJoinColumns={
@PrimaryKeyJoinColumn(name="playerId", referencedColumnName="id")
})
})
@XmlAccessorType(XmlAccessType.PROPERTY)
public class TopPlayers {
private QhPlayer playerTemplate;
@XmlTransient
@ManyToOne
@JoinColumn(table="player_mapping", name = "player_template_id", nullable = true)
public QhPlayer getPlayerTemplate() {
return playerTemplate;
}
}