Lazy Loading Exception,Please give a hand
I used the Spring2.0M3 and Hibernate EntityManager3.1.6 beta
Here is my configuration:
persistence.xml,(NO hibernate.cfg.xml)
Code:
<?xml version="1.0" encoding="UTF-8"?>
<persistence>
<persistence-unit name="ebEntityManager" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.jl.eb.dao.Category</class>
<class>com.jl.eb.dao.CategoryItem</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.DB2Dialect" />
<property name="hibernate.connection.driver_class" value="com.ibm.db2.jcc.DB2Driver" />
<property name="hibernate.connection.password" value="db2admin" />
<property name="hibernate.connection.url" value="jdbc:db2://10.1.1.10:50000/dbjl" />
<property name="hibernate.connection.username" value="db2admin" />
<property name="hibernate.ejb.autodetection" value="class" />
<property name="hibernate.max_fetch_depth" value="3"/>
</properties>
</persistence-unit>
</persistence>
And then my mapping file:
Code:
package com.jl.eb.dao;
import java.math.*;
import java.util.*;
import javax.persistence.*;
import java.text.*;
@Entity
@Table(name = "category", schema = "eb", uniqueConstraints = {})
public class Category implements java.io.Serializable {
private String id;
private String compId;
private String name;
private String no;
private Integer level;
private String desc;
private String parentId;
private String sysEmp;
private Date sysDate;
private Set<CategoryItem> categoryItem = new HashSet<CategoryItem>();
@Id
@Column(name = "id", length = 32)
public String getId() { return this.id; }
public void setId(String id) { this.id = id;}
@Column(name = "comp_Id", length = 20)
public String getCompId() {return this.compId;}
public void setCompId(String compId) {this.compId = compId;}
@Column(name = "name", length = 60)
public String getName() {return this.name;}
public void setName(String name) {this.name = name;}
@Column(name = "no", length = 13)
public String getNo() {return this.no;}
public void setNo(String no) {this.no = no;}
@Column(name = "level")
public Integer getLevel() {return this.level;}
public void setLevel(Integer level) {this.level = level;}
public void setLevel(String value) {this.level = Integer.parseInt(value);}
@Column(name = "desc", length = 60)
public String getDesc() {return this.desc;}
public void setDesc(String desc) {this.desc = desc;}
@Column(name = "parent_id", length = 32)
public String getParentId() {return this.parentId;}
public void setParentId(String parentId) {this.parentId = parentId;}
@Column(name = "sys_emp", length = 20)
public String getSysEmp() {return this.sysEmp;}
public void setSysEmp(String sysEmp) {this.sysEmp = sysEmp;}
@Column(name = "sys_date", length = 10)
public Date getSysDate() {return this.sysDate;}
public void setSysDate(Date sysDate) {this.sysDate = sysDate;}
public void setSysDate(String value) throws ParseException {
value = value.replace("-", "");
value = value.replace("/", "");
this.sysDate = new SimpleDateFormat("yyyyMMdd").parse(value);
}
@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "category")
public Set<CategoryItem> getCategoryItem() {return this.categoryItem;}
public void setCategoryItem(Set<CategoryItem> categoryItem) {this.categoryItem = categoryItem;}
}
package com.jl.eb.dao;
import java.math.*;
import java.util.*;
import javax.persistence.*;
import java.text.*;
@Entity
@Table(name = "category_item", schema = "eb", uniqueConstraints = {})
public class CategoryItem implements java.io.Serializable {
private String id;
private String no;
private String desc;
private String sysEmp;
private Date sysDate;
private Category category;
@Id
@Column(name = "id", length = 32)
public String getId() { return this.id; }
public void setId(String id) {this.id = id;}
@Column(name = "no", length = 3)
public String getNo() { return this.no;}
public void setNo(String no) {this.no = no;}
@Column(name = "desc", length = 100)
public String getDesc() {return this.desc;}
public void setDesc(String desc) {this.desc = desc;}
@Column(name = "sys_emp", length = 20)
public String getSysEmp() {return this.sysEmp;}
public void setSysEmp(String sysEmp) {this.sysEmp = sysEmp;}
@Column(name = "sys_date", length = 10)
public Date getSysDate() {return this.sysDate;}
public void setSysDate(Date sysDate) {this.sysDate = sysDate;}
public void setSysDate(String value) throws ParseException {
value = value.replace("-", "");
value = value.replace("/", "");
this.sysDate = new SimpleDateFormat("yyyyMMdd").parse(value);
}
@ManyToOne(cascade = {}, fetch = FetchType.LAZY)
@JoinColumn(name = "category_id", unique = false, nullable = true, insertable = true, updatable = true)
public Category getCategory() { return this.category;}
public void setCategory(Category category) {this.category = category;}
}
and then,I have two spring config file
spring_dao.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="ebEntityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="entityManagerName" value="ebEntityManager"/>
<property name="jpaProperties"><props></props></property>
</bean>
<bean id="ebTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="ebEntityManagerFactory" />
</bean>
<bean id="ebTransactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="ebTransactionManager" />
<property name="transactionAttributeSource">
<bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource" />
</property>
</bean>
<bean id="ebTransactionAttributeSourceAdvisor"
class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
<property name="transactionInterceptor" ref="ebTransactionInterceptor"/>
</bean>
<bean id="ebOpenEMinView" class="org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor">
<property name="entityManagerFactory" ref="ebEntityManagerFactory"/>
</bean>
<!-- DAO start -->
<bean id="eb_CategoryDAO" class="com.jl.eb.dao.CategoryDAO">
<property name="entityManagerFactory" ref="ebEntityManagerFactory" />
</bean>
<bean id="eb_CategoryItemDAO" class="com.jl.eb.dao.CategoryItemDAO">
<property name="entityManagerFactory" ref="ebEntityManagerFactory" />
</bean>
</beans>
spring_logic.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="EbCategoryMainLogic" class="com.jl.eb.logic.EbCategoryMainLogic">
<property name="dao">
<ref bean="eb_CategoryDAO"/>
</property>
</bean>
<bean id="EbCategoryItemLogic" class="com.jl.eb.logic.EbCategoryItemLogic">
<property name="dao">
<ref bean="eb_CategoryItemDAO"/>
</property>
<property name="cateDao">
<ref bean="eb_CategoryDAO"/>
</property>
</bean>
<bean id="EbjcClass_Tree" class="com.jl.eb.tree.EbjcClass_Tree">
<property name="dao">
<ref bean="eb_CategoryDAO"/>
</property>
</bean>
</beans>