Java 条件获取@manytone关系部分
是否有方法仅使用条件部分获取关联的Java 条件获取@manytone关系部分,java,hibernate,criteria,Java,Hibernate,Criteria,是否有方法仅使用条件部分获取关联的manytone关联实体 我有以下情况 @Entity public class Foo { @ManyToOne(optional = false, fetch = FetchType.LAZY) private Bar bar; // getters/setters and lots other attributes } @Entity public class Bar { private String name;
manytone
关联实体
我有以下情况
@Entity
public class Foo {
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Bar bar;
// getters/setters and lots other attributes
}
@Entity
public class Bar {
private String name;
@OneToMany(fetch = FetchType.EAGER)
private Collection<ComplexObject> complexObjects;
// getters/setters
}
不,不可能。当您将一个集合标记为已获取时,它总是热切地获取。如果您希望延迟加载,则应将其标记为lazy 但您只能选择三个属性:
Criteria c = session.createCriteria(Foo.class, "foo");
c.createAlias("foo.bar", "bar");
c.setProjection(Projections.projectionList().add(Projections.property("foo.attr1"))
.add(Projections.property("foo.attr2"))
.add(Projections.property("bar.name")));
或者,更具可读性:
String hql = "select foo.attr1, foo.attr2, bar.name from Foo foo"
+ " inner join foo.bar bar";
关于不让收藏被偷懒收藏的部分我知道。但你回答了我的问题:)我需要的就是这个投影。有没有办法让Hibernate将这个投影列表映射到Foo?有一种方法,使用ResultTransformer,但它非常脏。返回实体实例的方法应该返回实体实例,尊重它们的不变量和契约,附加到会话等。而不是一些半填充的对象。是的,这是事实。谢谢你的帮助:D
String hql = "select foo.attr1, foo.attr2, bar.name from Foo foo"
+ " inner join foo.bar bar";