假设我在JavaSpring中使用hibernateMap了一个对象用户(具有多个属性),并且对象地址(也具有多个属性)位于 hbm.xml
用户文件与地址存在多对一关系。
public class User{
Long id;
String name;
Integer age;
Address address;
}
public class Address{
Long id;
String description;
Integer number;
String state;
String country;
}
我想使用条件进行查询,其中我只想得到 id, name
仅限用户 id, description, number
地址。
我已经试过了 setProjection
但如果 id,name,address
在投影列表中,它将从address获取所有属性,但我只需要一些特定的性能问题。
Criteria criteria = createCriteria(User.class, "user");
criteria.setProjection(Projections.projectionList()
.add(Projections.property("user.id"),"id")
.add(Projections.property("user.name"),"name")
.add(Projections.property("user.address"),"address")
).setResultTransformer(Transformers.aliasToBean(User.class));
我使用的是较旧版本的hibernate,因此它使用xml文件Mapjava对象和数据库表:
<class name="com.models.impl.User" table="USER">
<id name="id" column="USER_ID"></id>
...
<many-to-one lazy="false" name="address" class="com.models.impl.Address" >
<column name="ADDR_ID"/>
</many-to-one>
</class>
在这种情况下,通过用户id过滤地址(及其特定列)的第二个查询不是我的选项。这样我就必须打开与数据库的另一个连接,因为我有一个超过三千行的查询,所以两个查询的性能开销将非常高。
有人能帮我吗?
谢谢大家
1条答案
按热度按时间e4eetjau1#
你用的是哪个版本?您必须加入地址关联,才能只投影特定的字段/列,例如:
我不知道遗留的hibernate criteria api的确切细节,但是我认为有了这些信息,您应该能够弄清楚:)