Java Hibernate:FetchMode急切与懒惰冲突

Java Hibernate:FetchMode急切与懒惰冲突,java,hibernate,lazy-loading,criteria,eager-loading,Java,Hibernate,Lazy Loading,Criteria,Eager Loading,我正在努力解决快速加载和延迟加载之间的冲突。 为了保持简单,我将使用猫和主人。 我想获取拥有特定元数据的cat的OwnerCat实体 我的起点是OwnerCat.class,它包含: @Id @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "id_owner") private Owner owner; @Id @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "id_cat

我正在努力解决快速加载和延迟加载之间的冲突。 为了保持简单,我将使用猫和主人。 我想获取拥有特定元数据的cat的OwnerCat实体

我的起点是OwnerCat.class,它包含:

@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_owner")
private Owner owner;

@Id
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "id_cat")
private Cat cat;
在我的Cat.class中,我有一组CatMetadataValue.class,它反向引用Cat类:由定义的CatMetadataValue.class

@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_cat")
private Cat cat;

@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_metadata")
private CatMetadata catMetadata;

@Column(name = "value")
private String value;
我需要保持这种状态

我的克里特拉大厦

    final Criteria criteria = currentSession().createCriteria(OwnerCat.class)
            .createAlias("cat.catMetadataValues", "catMetadataValue")
            .createAlias("catMetadataValue.catMetadata", "catMetadata")
            .add(Restrictions.eq("catMetadata.name", "EYES_COLOR"));
这给了我一个OwnerCat.class,其中包含cat字段的惰性实体

如果我从OwnerCat.class 使用LazyCatMetadataValue.class获取类型 该条件返回一个OwnerCat.class,其中包含cat字段的已加载实体

我得出的结论是,由于它为同一个entityClass(Cat.class)找到了两种不同的FetchType:它使用了最后一种检测到的FetchType

有什么办法解决这个问题吗

谢谢