你好,能帮我解决上述问题吗?十分感谢
以下是我的代码
表结构: 
create table book (--图书基本信息表 
bookId  number  primary key, --图书编号 
bookName varchar2(50) not null , --图书名 
bookType varchar2(50) not null , --图书类别 
publish varchar2(50), --出版社 
author varchar2(50), --作者 
price varchar2(50), --定价 
bookTotal number,--在库数量 
bookContent  varchar2(200)--图书介绍 
); 
create table userInfo (--用户信息表 
userId  number  primary key, --用户id号 
        userPs  varchar2(50) not null,--用户密码 
userName varchar2(50) not null, --用户名 
sex  varchar2(10) not null  --性别 
); 
create table booklendinfo(--图书借阅信息表 
id  number primary key,--主键标记 
bookId number not null, --书号 
userId number not null , --用户号 
lendDate date not null , --借书时间 
returnDate date  , --还书时间 
foreign key(bookId) references book(bookId) on delete cascade , 
foreign key(userId) references userInfo(userId)  on delete cascade 
); 
public Book searchBookByInfo(BookLendInfo info){ 
System.out.println("info:"+info); 
Book book=info.getBook(); 
book.getAuthor(); 
System.out.println("book:"+book); 
return book; 

上面是UserDaoImpl里面的方法,返回booklendinfo中的book对象,其中UserDaoImpl实现了UserDao接口,然后我在jsp中调用,请接着看下面的代码 
if(request.getAttribute("list")!=null){    
    List list=(List)request.getAttribute("list");//获取借书列表 
    WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext()); 
    UserDao userDao=(UserDao)ctx.getBean("userDaoProxy");//获取代理dao 
  Iterator it=list.iterator(); 
  while(it.hasNext()) 
  { 
  BookLendInfo info=(BookLendInfo)it.next(); 
  Book book=userDao.searchBookByInfo(info); 
  System.out.println("book"+book); 
我用了spring事务了,还是不行啊 
<bean id="userDaoProxy" 
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" > 
<property name="transactionManager"> 
<ref bean="transactionManager" /> 
</property> 
<property name="target"> 
<ref local="userDao" /> 
</property> 
<property name="transactionAttributes"> 
<props> 
<prop key="get*">PROPAGATION_REQUIRED,readOnly </prop> 
                <prop key="find*">PROPAGATION_REQUIRED,readOnly </prop>              
                <prop key="save*">PROPAGATION_REQUIRED </prop> 
                <prop key="insert*">PROPAGATION_REQUIRED </prop> 
                <prop key="update*">PROPAGATION_REQUIRED </prop> 
                <prop key="return*">PROPAGATION_REQUIRED </prop> 
                <prop key="search*">PROPAGATION_REQUIRED </prop>  //这就是上面方法的事务配置,UserDaoImpl中的searhBookByInfo方法 
                <prop key="*">PROPAGATION_REQUIRED,readOnly </prop> 
</props> 
</property> 
</bean>  <hibernate-mapping> 
    <class name="com.beans.BookLendInfo" table="BOOKLENDINFO" schema="SCOTT"> 
        <id name="id" type="java.lang.Long"> 
            <column name="ID" precision="22" scale="0" /> 
            <generator class="increment" /> 
        </id> 
        <many-to-one name="book" class="com.beans.Book" fetch="select"> 
            <column name="BOOKID" precision="22" scale="0" not-null="true" /> 
        </many-to-one> 
        <many-to-one name="userinfo" class="com.beans.UserInfo" fetch="select"> 
            <column name="USERID" precision="22" scale="0" not-null="true" /> 
        </many-to-one> 
        <property name="lenddate" type="java.util.Date"> 
            <column name="LENDDATE" length="7" not-null="true" /> 
        </property> 
        <property name="returndate" type="java.util.Date"> 
            <column name="RETURNDATE" length="7" /> 
        </property> 
    </class> 
</hibernate-mapping>
<hibernate-mapping> 
    <class name="com.beans.Book" table="BOOK" schema="SCOTT"> 
        <id name="bookid" type="java.lang.Long"> 
            <column name="BOOKID" precision="22" scale="0" /> 
            <generator class="increment" > 
            </generator> 
        </id> 
        <property name="bookname" type="java.lang.String"> 
            <column name="BOOKNAME" length="50" not-null="true" /> 
        </property> 
        <property name="booktype" type="java.lang.String"> 
            <column name="BOOKTYPE" length="50" not-null="true" /> 
        </property> 
        <property name="publish" type="java.lang.String"> 
            <column name="PUBLISH" length="50" /> 
        </property> 
        <property name="author" type="java.lang.String"> 
            <column name="AUTHOR" length="50" /> 
        </property> 
        <property name="price" type="java.lang.String"> 
            <column name="PRICE" length="50" /> 
        </property> 
        <property name="booktotal" type="java.lang.Long"> 
            <column name="BOOKTOTAL" precision="22" scale="0" /> 
        </property> 
        <property name="bookcontent" type="java.lang.String"> 
            <column name="BOOKCONTENT" length="200" /> 
        </property> 
        <set name="booklendinfos" inverse="true" cascade="save-update" lazy="false"> 
            <key> 
                <column name="BOOKID" precision="22" scale="0" not-null="true" /> 
            </key> 
            <one-to-many class="com.beans.BookLendInfo" /> 
        </set> 
    </class> 
</hibernate-mapping>

解决方案 »

  1.   

    ssh 级联查询遇到could not initialize proxy - the owning Session 
      

  2.   

    ssh 级联查询遇到could not initialize proxy - the owning Session 
      

  3.   

    100%是lazy的问题。这个延迟加载,必须在hibernate的session里面才可以。
    而你的页面已经离开事务session了。当然也就不能加载了,解决方式有3个
    1 使用一个 open session in view 的东西
    2 把lazy 改成 eager
    3 在使用时,事务代码里调用一下那个东西,就会自动读取了。我个人一般用3,这样能保证我需要的方法会有内容,不需要的就节省了。,

      

  4.   

    请问事务代码里应该怎么调用啊?<prop key="search*">PROPAGATION_REQUIRED </prop> //application-context.xml里的事务配置
    public Book searchBookByInfo(BookLendInfo info){ //UserDaoImpl里的代码,实现了UserDao接口
    Book book=info.getBook(); 
    return book; 

    我已经调用search*方法了呀!!
    我是想从子表中取出父表对象,再取出父表的一些属性,也就是级联查询(头疼)您能告知吗?急
      

  5.   

    在Book book=info.getBook()这里就会报ssh 级联查询遇到could not initialize proxy - the owning Session  
    这个异常。。我打算取出book对象,再取出图书的一些信息,比如书名,书的出版设等。。
      

  6.   

    <hibernate-mapping> 
        <class name="com.beans.Book" table="BOOK" schema="SCOTT" lazy="false"
            <id name="bookid" type="java.lang.Long"> 
                <column name="BOOKID" precision="22" scale="0" /> 
                <generator class="increment" > 
                </generator> 
            </id> 
            <property name="bookname" type="java.lang.String"> 
                <column name="BOOKNAME" length="50" not-null="true" /> 
            </property> 
            <property name="booktype" type="java.lang.String"> 
                <column name="BOOKTYPE" length="50" not-null="true" /> 
            </property> 
            <property name="publish" type="java.lang.String"> 
                <column name="PUBLISH" length="50" /> 
            </property> 
            <property name="author" type="java.lang.String"> 
                <column name="AUTHOR" length="50" /> 
            </property> 
            <property name="price" type="java.lang.String"> 
                <column name="PRICE" length="50" /> 
            </property> 
            <property name="booktotal" type="java.lang.Long"> 
                <column name="BOOKTOTAL" precision="22" scale="0" /> 
            </property> 
            <property name="bookcontent" type="java.lang.String"> 
                <column name="BOOKCONTENT" length="200" /> 
            </property> 
            <set name="booklendinfos" inverse="true" cascade="save-update" lazy="false"> 
                <key> 
                    <column name="BOOKID" precision="22" scale="0" not-null="true" /> 
                </key> 
                <one-to-many class="com.beans.BookLendInfo" /> 
            </set> 
        </class> 
    </hibernate-mapping> 
      

  7.   

    <hibernate-mapping> 
        <class name="com.beans.Book" table="BOOK" schema="SCOTT" lazy="false"
            <id name="bookid" type="java.lang.Long"> 
                <column name="BOOKID" precision="22" scale="0" /> 
                <generator class="increment" > 
                </generator> 
            </id> 
            <property name="bookname" type="java.lang.String"> 
                <column name="BOOKNAME" length="50" not-null="true" /> 
            </property> 
            <property name="booktype" type="java.lang.String"> 
                <column name="BOOKTYPE" length="50" not-null="true" /> 
            </property> 
            <property name="publish" type="java.lang.String"> 
                <column name="PUBLISH" length="50" /> 
            </property> 
            <property name="author" type="java.lang.String"> 
                <column name="AUTHOR" length="50" /> 
            </property> 
            <property name="price" type="java.lang.String"> 
                <column name="PRICE" length="50" /> 
            </property> 
            <property name="booktotal" type="java.lang.Long"> 
                <column name="BOOKTOTAL" precision="22" scale="0" /> 
            </property> 
            <property name="bookcontent" type="java.lang.String"> 
                <column name="BOOKCONTENT" length="200" /> 
            </property> 
            <set name="booklendinfos" inverse="true" cascade="save-update" lazy="false"> 
                <key> 
                    <column name="BOOKID" precision="22" scale="0" not-null="true" /> 
                </key> 
                <one-to-many class="com.beans.BookLendInfo" /> 
            </set> 
        </class> 
    </hibernate-mapping> 
      

  8.   

    你是通过啥对象得到book的啊。在那个对象的配置文件当中配置book的地方加个 lazy="false" 看行不行