У меня возникают проблемы, когда Hibernate запрашивает класс на другой стороне ленивых отношений onetoone.Hibernate JPA OneToOne запрос, несмотря на Lazy Fetch
Запрос к top_players, в зависимости от настроек кэша, выполняет запрос через таблицу сопоставления, чтобы получить идентификаторы для таблицы QHPlayer.
После выполнения основного запроса он запрашивает для каждого экземпляра таблицы QHPlayer.
Однако, это происходит не так, как в двух разных сценариях.
Если у меня включен кеширование, он будет запрашивать экземпляры QHPlayer, а затем он будет запрашивать информацию в таблице inventory_item. Если у меня отключено кэширование, он сделает запрос к QHPlayer с присоединением к inventory_item.
Проблема в том, что независимо от того, как я это делаю, она настаивает на том, чтобы запросить таблицу inventory_item. Этого я не хочу. В настоящее время мне не нужны данные в inventory_item.
Я предполагаю, что что-то не так в моих объявлениях onetoone между QHPlayer и PlayerInventoryItem.
Любые идеи, пожалуйста?
Соответствующий код приведен ниже:
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;
}
}