gpt4 book ai didi

java - Hibernate 上任意类型映射的连接查询

转载 作者:行者123 更新时间:2023-12-02 10:09:50 25 4
gpt4 key购买 nike

我已经实现了与 Assets 、患者、员工的任何关系标签实体映射

我尝试了下面的 JPQL 查询

em.createQuery("从Tag t中选择t加入t.tagAssociation ta");

我收到以下错误

org.hibernate.hql.internal.ast.QuerySyntaxException: An AnyType attribute cannot be join fetched error

查询有什么问题?如何编写连接查询,我想获取 Assets 和标签关联列表。

代码:

 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
}

最佳答案

我找不到明确禁止的地方(所以也许其他人可以提供更好的答案?),但是 documentation警告不可能为这种类型的关系创建外键,并且急切的连接将非常复杂。 Hibernate 很可能不支持 @Anyjoin fetch ,而是稍后使用单独的选择来读取关系。如果是这样,您可以使用 @BatchSize 通过一次选择读取多个关系,避免 N+1 问题。

关于java - Hibernate 上任意类型映射的连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55075116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com