hql join的时候只取部分字段出错

hql join的时候只取部分字段出错

问题描述:

有两张表account,supplier
查询的时候我想取部分字段
name="supplier"
column="relate_id"
class="com.scm.domain.Supplier"
fetch="join"
/>




String hql = "select new Account(account.id,account.name,account.account,account.password,supplier) from Account account left join fetch account.supplier";
但是这样取会出错
java.lang.NullPointerException
org.hibernate.util.ReflectHelper.getConstructor(ReflectHelper.java:195)
这是什么原因,我在Account类里已经有了构造函数:
public Account(Integer id, String name, String account, String password, Supplier supplier) {
this.id = id;
this.name = name;
this.account = account;
this.password = password;
this.supplier = supplier;

}

[quote]
lazy=true之后,description还是会被选出来的 [/quote]
哦,是的,我犯晕了,不好意思,是关联的对象不会被取出来,属性还是会被取出来的。

那就只能在构造的时候不要把supplier放进去,根据查出来的结果单独取查一次supplier,然后再把supplier设到Account对象中去

直接

select account from Account account left join fetch account.supplier

呢?

Supplier 是你自己定义的类吗?
这个类有构造函数吗

这个supplier也要new的

select new Account(account.id,account.name,account.account,account.password,new Supplier(...)) from Account account left join fetch account.supplier

这样子呢?

select new Account(account.id,account.name,account.account,account.password,new Supplier(supplier.id, supplier.code, supplier.name, supplier.status, supplier.address,supplier.password, supplier.postcode, supplier.contactor, supplier.type)) from Account account,Supplier supplier left join fetch account.supplier

这样子再试试,这个问题我们以前也碰到过,好像Hibernate对双层的构造不支持。。。

我一般设计 大字段是单独放到一个表里,然后 跟信息表实现1对1的关系,并使用共同的主键...

[quote]那你们一般是怎么解决这个问题的 [/quote]

一般就只能用一层构造,缺的那个再查一次,然后设进去。

其实你如果把lazy设为true的话,字段都是到用的才拿的,那个clob字段不用应该不会被拿出来。

[quote]
属性的lazy要用工具在编译时代码加强才行的吧,不这样的话属性的lazy实现不了啊? [/quote]
如果是配置文件的话,改一下配置文件就好了。如果你是注解的方式那么应该是要重新编译的。

lazy="true" session不要关闭,取完了值再关