Запрос присоединения для любого отображения типов в Hibernate - PullRequest
0 голосов
/ 09 марта 2019

Я реализовал любое сопоставление сущностей тегов отношений с активом, пациентом, персоналом

Я пробовал ниже JPQL Query

em.createQuery("select t from Tag t join t.tagAssociation ta");

Я получил следующую ошибку

org.hibernate.hql.internal.ast.QuerySyntaxException: атрибут AnyType не может быть соединен с полученной ошибкой

Что не так с запросом? Как написать запрос на присоединение, и я хочу получить связанный список активов и тегов.

Код:

 public interface ITagAssociatable {
 public String getName();   
}

 @Entity
 public class Tag {
 @Id
 private String tagSerialNumber;    

@JsonIgnore
@Any(metaColumn = @Column(name = "tag_association_type"))
@AnyMetaDef(idType = "long", metaType = "string", metaValues = {
        @MetaValue(targetEntity = Asset.class, value = "Asset"),
        @MetaValue(targetEntity = Staff .class, value = "Staff"),
        @MetaValue(targetEntity = Patient.class, value = "Patient") })
@Cascade({ org.hibernate.annotations.CascadeType.MERGE })
@JoinColumn(name = "tag_association_id")
private ITagAssociatable tagAssociation;
 }

    @Entity
    public class Asset implements ITagAssociatable {
@Id
private Long id;
private String name
  }

    @Entity
    public class Staff implements ITagAssociatable {
@Id
private Long id;
private String name;
  }

    @Entity
    public class Patient implements ITagAssociatable{
@Id
private Long id;
private String name
  }

1 Ответ

0 голосов
/ 09 марта 2019

Я не могу найти, где это конкретно запрещено (так, может быть, кто-то другой может дать лучший ответ?), Но документация предупреждает, что невозможно создать внешние ключи для этого типа отношений инетерпеливое соединение было бы довольно сложным.Скорее всего, Hibernate не поддерживает join fetch для @Any и будет читать отношения с отдельными выборками позже.Если это так, вы можете использовать @BatchSize для чтения многих отношений с одним выбором, избегая проблемы N + 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...