Итак, у меня есть простое представление, которое имеет 3 столбца: tag_id, product_id, is_direct_tag.Вот как я отобразил это:
@Entity
@Immutable
@JsonInclude(Include.NON_NULL)
@Table(name = "tag_to_product_complete", schema = "tags")
public class ProductTagComplete {
@SuppressWarnings("FieldCanBeLocal")
@EmbeddedId
private ProductTagEntity id;
@Column(name = "is_direct_tag", insertable = false, updatable = false)
private boolean isDirectTag;
public ProductTagEntity getId() {
return id;
}
public boolean getIsDirectTag() {
return isDirectTag;
}
}
Вот также идентификатор:
@Embeddable
public class ProductTagEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "tag_id")
private long tagId;
@Column(name = "product_id")
private long productId;
public ProductTagEntity() {
}
public ProductTagEntity(long productId, long tagId) {
this.productId = productId;
this.tagId = tagId;
}
public long getTagId() {
return tagId;
}
public long getProductId() {
return productId;
}
}
Вот как я пытаюсь получить результаты из этого представления в хранилище:
@Transactional
public List<ProductTagComplete> getProductTagsByTagId(long tagId) {
Session hibernateSession = entityManager.unwrap(Session.class);
this.getRootCriteria(hibernateSession, ProductTagComplete.class);
Predicate tagIdPredicate = criteriaBuilder.equal(root.get("id").get("tagId"), tagId);
criteriaQuery = criteriaQuery.where(tagIdPredicate);
return hibernateSession.createQuery( criteriaQuery ).getResultList();
}
Но вот проблема.Это работает большинство времени.Но иногда я случайно получаю следующие ошибки (я получаю все их за один запрос) для последней строки getResultList ():
org.hibernate.hql.internal.ast.InvalidPathException: Invalid path: 'generatedAlias0.id.tagId'
antlr.NoViableAltException: unexpected end of subtree
antlr.SemanticException: left-hand operand of a binary operator was null