我正在努力应对急切加载和延迟加载之间的冲突。 为了简单起见,我将使用猫和主人。 我想获取拥有具有特定元数据的猫的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;
我需要保持这种状态。
我的critera建筑
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 交换 Eager 获取类型 使用 CatMetadataValue.class 中的 Lazy 获取类型 该条件返回一个OwnerCat.class,其中包含对于cat字段的预先加载的实体。
我得出结论,因为它为同一个entityClass( Cat.class )找到了两个不同的fetchType:它检测到了最后一个。
有什么方法可以解决这个问题吗?
由于