子集合中的惰性初始化异常

时间:2017-04-06 12:37:11

标签: java database spring hibernate jpa

我有一个类似下面的实体类

String a = "a";
String b = new String("a");
System.out.println(a == b); // <-- false
System.out.println(a.equals(b)); // <-- true

}

和子实体如下

@Table(name = "PARENT")
public class Parent implements Comparable<Parent>, Serializable, Cloneable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "seq-gen")
@GenericGenerator(name = "seq-gen", strategy = "native",
        parameters = {@Parameter(name = "sequence_name", value = "id_seq")})
private Long id;


@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
@BatchSize(size = 50)   
@SortNatural
private SortedSet<Child> child  = new TreeSet<>();

@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
@BatchSize(size = 50)   
@SortNatural
private SortedSet<Child> child  = new TreeSet<>();

@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
@BatchSize(size = 50)   
@SortNatural
private SortedSet<Second> second = new TreeSet<>(); 

}

我正在通过会话

调用服务方法中的孩子
@Entity
@Table(name = "CHILD")

public class Child implements Comparable<Object>, Serializable, Cloneable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "seq-gen")
@GenericGenerator(name = "seq-gen", strategy = "native",
        parameters = {@Parameter(name = "sequence_name", value = "child_id_seq")})
private Long id;

@ManyToOne()
@Fetch(FetchMode.SELECT)
@JoinColumn(name = "parentId", nullable = false)
private Parent parent;

我在

处获得了Lazy Initialization异常

public Child getChild(final Long id,) throws Exception { try { Child child = (Child) getHibernateTemplate().execute(new HibernateCallback<Child>() { /* (non-Javadoc) * @see org.springframework.orm.hibernate5.HibernateCallback#doInHibernate(org.hibernate.Session) */ public Child doInHibernate(Session session) throws HibernateException { Child child = (Child)session.get(Child.class, id); if(child != null) { Parent parent = child.Parent(); if(step.getParent() != null) { Hibernate.initialize(parent); if (parent.getSecond () != null) { Hibernate.initialize(parent.getSecond()); } } } } } } }

我试过添加

if (parent.getSecond () != null) {

在Parent和Child类中,但没有成功,我们有严格的规则不使用EAGER。请帮我解决上述问题。

0 个答案:

没有答案