我已经实现了与Asset,Patient,Staff的任何关系Tag实体映射
我尝试了以下JPQL查询
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
}
答案 0 :(得分:0)
我找不到明确禁止的位置(因此也许其他人可以提供更好的答案?),但是documentation警告说,无法为这种类型的关系创建一个外键,并且渴望加入会非常复杂。 Hibernate很可能不支持join fetch
的{{1}},并且稍后会读取带有单独选择的关系。如果是这样,您可以使用@Any
一次读取许多关系,从而避免了N + 1问题。