Abbiamo un oggetto multimediale:recupero Eager in una primavera Specification
public class Media implements Serializable {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(insertable = false, updatable = false)
private Long id;
// other attributes
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "channelId", referencedColumnName = "id")
private Channel channel;
// getters, setters, hashCode, equals, etc.
}
La desiderosi fetch genitore canale lavora a metodi repository regolari, ma non quando si utilizza una specifica.
Ecco lo Specification:
public class MediaSpecs {
public static Specification<Media> search(final Long partnerId, final Integer width, final Integer height,
final String channelType) {
return new Specification<Media>() {
@Override
public Predicate toPredicate(Root<Media> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
Predicate restrictions = cb.equal(root.get("archived"), false);
// other restrictions are and-ed together
if (channelType != null) {
Join<Media, ChannelType> join = root.join("channel").join("orgChannelType").join("type");
restrictions = cb.and(cb.equal(join.get("type"), channelType));
}
return restrictions;
}
};
}
La "ricerca" spec funziona correttamente quando viene specificata ChannelType, quindi il join sta lavorando. Come posso specificare che i join debbano essere recuperati con entusiasmo?
Ho provato ad aggiungere
Fetch<Media, ChannelType> fetch = root.fetch("channel").fetch("orgChannelType").fetch("type");
Poi Hibernate genera un'eccezione:
org.hibernate.QueryException: interrogazione specificata unirsi recupero, ma il proprietario dell'associazione scaricata non era presente nella lista di selezione [ FromElement {esplicito, non un join di raccolta, preleva join, recupera proprietà non pigri, classAlias = generatoAlias4 ...
Come aggiungere le associazioni all'elenco di selezione?
Grazie.
pl spiegare la tua risposta –
verifico se questa è una query di conteggio (risultato Long.class) poi ho appena ignorare un download aderire – Eugene