hibernate的hql查询语句问题

hrhlsc 2012-03-25 07:49:25
两个对象
public class Manager {
private Integer id; //管理员ID号
private String name; //管理员名称
private String pwd; //管理员密码
private Purview purview;
省略set和get方法
}

public class Purview {
private Integer id;
private int sysset=0; //系统设置权限
private int readerset=0; //读者管理权限
private int bookset=0; //图书管理权限
private int borrowback=0; //图书借还权限
private int sysquery=0; //系统查询权限
private Manager manager;
省略set和get方法

}

方法query_p
public Manager query_p(String str) {
String hql = "select m.*,p.sysset,p.readerset,p.bookset,p.borrowback,p.sysquery from Manager m
left join Purview p on m.id=p.id where m.name='"+str+"'";
Manager manager1 = (Manager)this.getHibernateTemplate().find(hql).get(0);
return manager1;
}


我写这个方法返回Manager类型,但是不对
问:应该怎么写,才能实现联合查询返回Manager,Manager类里的purview也要有值。

...全文
1183 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
hrhlsc 2012-03-25
  • 打赏
  • 举报
回复
对了 因为是登陆跳转页面,是不是我在jsp页面里调用该方法出现的问题??怎么解决呢?
hrhlsc 2012-03-25
  • 打赏
  • 举报
回复
还是不对啊,谢谢各位了
dryZeng 2012-03-25
  • 打赏
  • 举报
回复
private Manager manager是指从页面接收值吧?
要写getter/setter。

Manager是po,不用注入的。
hrhlsc 2012-03-25
  • 打赏
  • 举报
回复
请问
<bean id="managerAction" class="net.dbet.booksystem.action.ManagerAction">
<property name="managerDAO" ref="managerDAO"/>
</bean>
这里要把manager(managerAction里的private Manager manager)注入进去吗?
hrhlsc 2012-03-25
  • 打赏
  • 举报
回复
不过之前这里写错了
<!-- 那些类的哪些方法参与事务 -->
<aop:config>
<aop:pointcut expression="execution(* net.dbet.booksystem.*.*(..))" id="cut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="cut"/>
</aop:config>
现在改过来了 控制台没错误,但是页面出错了,在方法里没有输出
我第一次整合ssh框架,哎。。。
licip 2012-03-25
  • 打赏
  • 举报
回复
感觉是你的sessionFactory没有注入进来。
hrhlsc 2012-03-25
  • 打赏
  • 举报
回复
<bean id="managerAction" class="net.dbet.booksystem.action.ManagerAction">
<property name="managerDAO" ref="managerDAO"/>
</bean>

<bean id="managerDAO" class="net.dbet.booksystem.dao.ManagerDAO">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
hrhlsc 2012-03-25
  • 打赏
  • 举报
回复
我是这样配置的
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>

<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>

<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="search*" propagation="SUPPORTS"/>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>

<!-- 那些类的哪些方法参与事务 -->
<aop:config>
<aop:pointcut expression="execution(* net.dbet.booksystem.*.*(..))" id="cut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="cut"/>
</aop:config>
宏Lee 2012-03-25
  • 打赏
  • 举报
回复
如果你是继承的HibernateDaoSupport
就需要<bean id="managerDAO" class="net.dbet.booksystem.dao.ManagerDAO">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
宏Lee 2012-03-25
  • 打赏
  • 举报
回复
你的ManagerDAO,里面加的是sessionFactory还是hibernateTemplate?
如果是hibernateTemplate:
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="managerDAO" class="net.dbet.booksystem.dao.ManagerDAO">
<property name="hibernateTemplate" ref="hibernateTemplate" />
</bean>

sessionFactory同理,记得写set方法
dryZeng 2012-03-25
  • 打赏
  • 举报
回复
楼主看看当前类的配置文件的bean里有没有注入sessionFactory?
hrhlsc 2012-03-25
  • 打赏
  • 举报
回复
哦,我是新手,没有任何经验,还没毕业呢
HibernateTemplate怎么注入啊?
我是整合ssh框架
宏Lee 2012-03-25
  • 打赏
  • 举报
回复
我测试过this.getHibernateTemplate().find(hql).get(0)如果没有查询到数据报的是IndexOutOfBoundsException,没得说,肯定HibernateTemplate没有注入进来
宏Lee 2012-03-25
  • 打赏
  • 举报
回复
会报空异常只有可能是HibernateTemplate没有注入进来
hrhlsc 2012-03-25
  • 打赏
  • 举报
回复
List<Manager> managerList = this.getHibernateTemplate().find(hql);这行产生的
昨日凡阳 2012-03-25
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 a199231 的回复:]

如果这样写还是为空,那你就去检查HibernateTemplate有没有注入进来
[/Quote]

1、确定dataSource已经成功注入
2、确定dao成功被注入
3、Manager manager = (Manager)this.getHibernateTemplate().find(hql).get(0);你这样直接写,强制转换,如果没有数据,明显会报转换错误或者空指针。
dryZeng 2012-03-25
  • 打赏
  • 举报
回复
你说明你的空指针是在哪一行产生的?
hrhlsc 2012-03-25
  • 打赏
  • 举报
回复
我确定
public Manager query_p(String str) {
String hql="from Manager where name=?";
Manager manager = (Manager)this.getHibernateTemplate().find(hql,str).get(0);
manager1.getPurview();
return manager;
}
这样写也是空异常

那个HibernateTemplate注入进来了
其他语句有正确运行了啊
hrhlsc 2012-03-25
  • 打赏
  • 举报
回复
List<Manager> managerList = this.getHibernateTemplate().find(hql);
Manager manager = managerList.get(0);
这样写还是一样的错误啊
宏Lee 2012-03-25
  • 打赏
  • 举报
回复
如果这样写还是为空,那你就去检查HibernateTemplate有没有注入进来
加载更多回复(13)

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧